我正在 mvc4 中开发 webapi 。我想创建一个包含HttpStatusCode
类inherits HttpStatusCode
的自定义signup
的类。假设我有一个abc@abc.com
api,需要用户详细信息,如姓名,姓氏,电子邮件,密码等。假设用户输入电子邮件HttpStatusCode
并检查用户是否已存在。如果此电子邮件已存在,我想返回Custom HttpStatusCode。假设我已经为已存在的电子邮件创建了 1001 return new System.Web.Http.Results.ResponseMessageResult(
Request.CreateErrorResponse(
(HttpStatusCode)1001,
new HttpError("Email is already exists.")
)
);
。
我试过这样的事情
return Unauthorized();
但我不知道这是否正确。当我们使用return AlreadyExists()
时,这意味着它是未经授权的访问,会返回 401 错误代码。同样,我想创建一个自定义响应和状态代码。在我的情况下假设电子邮件ID已经存在,那么我应该返回这样的东西
{{1}}返回 1001 状态代码。我可以实现这样的方式吗?如果是的话,我该如何实现呢?有人可以帮帮我吗?
答案 0 :(得分:5)
您不应该发明新的HTTP状态代码。我说它至多违反了Principle of Least Astonishment。
如何返回HTTP状态代码为400 (Bad Request)的响应,以及包含应用程序错误代码和消息的错误对象?
或者,您可以使用带有异常参数的CreateErrorResponse
重载。
Request.CreateErrorResponse(
HttpStatusCode.BadRequest,
new Exception("Email already exists.")
));
这会导致从您的端点返回以下JSON:
{
"Message":"An error has occurred.",
"ExceptionMessage":"Email already exists.",
"ExceptionType":"System.Exception",
"StackTrace":null
}
答案 1 :(得分:2)
当我们使用
return Unauthorized()
[...]在我的情况下假设电子邮件ID已经存在,那么我应该返回类似这样的内容return AlreadyExists()
Unauthorized()
只是基本控制器中的一个方法,您可以将方法添加到您自己的控制器中:
public IHttpActionResult AlreadyExists()
{
return new System.Web.Http.Results.ResponseMessageResult(
Request.CreateErrorResponse(
(HttpStatusCode)409,
new HttpError("Already exists")
)
);
}
如果要重复使用它,请添加自己的控制器基类,并让控制器继承自:
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
{
// ...
}
和其他人一样,不要发明自己的HTTP状态代码。