gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:55:39 25 4
gpt4 key购买 nike

我有使用 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 中删除自定义错误消息,消息也是一样的。这是一些可以被覆盖的默认行为吗?我错过了什么重要的东西吗?

最佳答案

使用以下代码代替设置 context.Result

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

关于c# - ASP.NET Web API 处理的异常返回错误的状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47281305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com