Aja*_*y P 0 c# http-status-codes asp.net-mvc-4 asp.net-web-api
我正在开发mvc4中的webapi.我想创建一个包含自定义一个类HttpStatusCode,其inherits HttpStatusCode类.假设我有一个signupapi需要用户详细信息,如姓名,姓氏,电子邮件,密码等.假设用户输入电子邮件abc@abc.com,我检查用户是否已经存在.如果此电子邮件已存在,我想返回Custom HttpStatusCode.假设我已经创建了1001 HttpStatusCode用于电子邮件.
我试过这样的事情
return new System.Web.Http.Results.ResponseMessageResult(
Request.CreateErrorResponse(
(HttpStatusCode)1001,
new HttpError("Email is already exists.")
)
);
Run Code Online (Sandbox Code Playgroud)
但我不知道这是不是正确的方法.当我们使用return Unauthorized();它意味着它是一个未经授权的访问,返回401错误代码.同样,我想创建一个自定义响应和状态代码.在我的情况下,假设电子邮件ID已经存在,那么我应该返回这样的
return AlreadyExists()返回1001状态代码的东西.我可以实现这样的方式吗?如果是的话,我该如何实现呢?有人可以帮帮我吗?
您不应该发明新的HTTP状态代码.我会说它充其量违反了最小惊讶原则.
如何返回HTTP状态代码为400(错误请求)的响应,以及包含应用程序错误代码和消息的错误对象?
或者,您可以使用CreateErrorResponse带有异常参数的重载.
Request.CreateErrorResponse(
HttpStatusCode.BadRequest,
new Exception("Email already exists.")
));
Run Code Online (Sandbox Code Playgroud)
这会导致从您的端点返回以下JSON:
{
"Message":"An error has occurred.",
"ExceptionMessage":"Email already exists.",
"ExceptionType":"System.Exception",
"StackTrace":null
}
Run Code Online (Sandbox Code Playgroud)
当我们使用
return Unauthorized()[...] 时,假设电子邮件 ID 已经存在,那么我应该返回类似这样的内容return AlreadyExists()
Unauthorized()只是基本控制器中的一个方法,您可以将方法添加到您自己的控制器中:
public IHttpActionResult AlreadyExists()
{
return new System.Web.Http.Results.ResponseMessageResult(
Request.CreateErrorResponse(
(HttpStatusCode)409,
new HttpError("Already exists")
)
);
}
Run Code Online (Sandbox Code Playgroud)
如果你想重用它,请添加你自己的控制器基类并让你的控制器继承它:
public class MyApiController : ApiController
{
public IHttpActionResult AlreadyExists()
{
return new System.Web.Http.Results.ResponseMessageResult(
Request.CreateErrorResponse(
(HttpStatusCode)409,
new HttpError("Already exists")
)
);
}
}
public class RegisterController : MyApiController
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
正如其他人所说,不要发明自己的 HTTP 状态代码。
| 归档时间: |
|
| 查看次数: |
6036 次 |
| 最近记录: |