3

我正在编写一个 MSMVC API 来处理简单的用户注册。在 API 中,当传递给控制器​​的数据无效时,我想抛出异常。

    public XmlResult RegisterByEmailAddress(UserModel model)
    {
        var errorResponse = new HttpResponseMessage(HttpStatusCode.BadRequest)
        {
            Content = new StringContent("Problem"),
            ReasonPhrase = "Problem"
        };
        throw new HttpResponseException(errorResponse);
    }

但是,无论我在异常中设置了什么,我都只会在客户端响应中看到 500 错误。我正在使用 Visual Studio 2012 并在本地 IIS 服务器上以调试模式运行 API。

在 Chrome Dev 中看到的响应的实际内容是:

方法:获取,状态:500 内部服务器错误,键入 text/html

有谁知道问题可能是什么?

4

5 回答 5

4

我认为,根据您自己的回答以及我刚刚进行的一些测试,您的控制器继承自错误的基类。如果您发布了控制器的其余部分,可能会更容易看到。

所有 API 控制器都应该继承自 ApiController

MyController : ApiController
于 2013-08-15T09:27:56.770 回答
1

好的,经过多次试验和错误,以下工作:

throw new HttpException((int)HttpStatusCode.BadRequest, "Invalid password provided to the Api");

这似乎违背了(我认为)建议在开发 Api 时抛出 HttpResponseException 的文档。

于 2013-08-14T22:12:31.070 回答
0

我正在做类似的事情,但在扩展的 ExceptionFilterAttribute 中。不确定您是否可以这样做,但想到共享我当前使用的代码。这只是一个示例。因为我在这个方法中还有很多要添加的东西。

public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
    var actionName = actionExecutedContext.ActionContext.ActionDescriptor.ActionName;
    var controllerName =
        actionExecutedContext.ActionContext.ActionDescriptor.ControllerDescriptor.ControllerName;
    Logger.LogException(controllerName + ":" + actionName, actionExecutedContext.Exception);
    actionExecutedContext.Response = new HttpResponseMessage(HttpStatusCode.InternalServerError)
                                         {
                                             ReasonPhrase = YourPhrase
                                         };
}
于 2013-08-12T11:44:12.617 回答
0

如果您继承 ApiController 并在构造函数中抛出 HttpException - 无论您传递了什么 HttpStatusCode,您都会收到内部服务器错误 (500)

于 2017-03-10T01:48:41.213 回答
0

如果您从构造函数或从构造函数调用的函数/方法抛出异常,它也会给您的状态 500。

于 2019-09-12T07:31:22.660 回答