ASP.NET Web API处理异常返回错误的状态代码

时间:2017-11-14 08:51:20

标签: c# asp.net asp.net-web-api

我有使用ASP.NET Web API 2.0的项目,并且在此API中有一个方法抛出异常:

    public void TestMethod()
    {
        throw new Exception("Error40001");
    }

当抛出此异常时,我已经设置了一个处理这些东西的处理程序:

public class APIExceptionHandler : ExceptionHandler
{
    public override void Handle(ExceptionHandlerContext context)
    {
        var rm = Language.Error.ResourceManager;
        string message = rm.GetString(context.Exception.Message);
        string detailed = "";
        try
        {
            detailed = rm.GetString(context.Exception.Message + "Detailed");
        }
        catch
        {
            if (String.IsNullOrEmpty(detailed))
            {
                detailed = message;
            }
        }
        HttpStatusCode code = (HttpStatusCode)Enum.Parse(typeof(HttpStatusCode), context.Exception.Message.Replace("Error", "").Substring(0, 3));

        context.Result = new ResponseMessageResult(context.Request.CreateResponse(code,
            new ErrorInformation() { Message = message, DetailedMessage = detailed }));
    }
}

public class ErrorInformation
{
    public string Message { get; set; }
    public string DetailedMessage { get; set; }
}

我遇到的问题是,当我收到此错误时,它不再是我设置的相同状态代码。处理程序选择它并创建一个错误代码为400的响应消息结果。

Here you see the result that is returned with status code 400

400 stts

但是当我在浏览器中收到错误时,状态代码已更改

Here you see the status code that is returned

cd chged

And the content

cntent

从上一张图片中可以看出,处理异常的内容是在开始时,但是已经包含了一条默认错误消息,并且状态代码已被覆盖。

我遇到的问题是,即使我从webconfig中删除自定义错误消息,消息也是一样的。这是一些可以覆盖的默认行为吗?我错过了一些重要的事情吗?

1 个答案:

答案 0 :(得分:0)

而不是设置context.Result使用以下代码

throw new HttpResponseException(context.Request.CreateResponse(code,
            new ErrorInformation() { Message = message, DetailedMessage = detailed }));