我有使用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
但是当我在浏览器中收到错误时,状态代码已更改
Here you see the status code that is returned
从上一张图片中可以看出,处理异常的内容是在开始时,但是已经包含了一条默认错误消息,并且状态代码已被覆盖。
我遇到的问题是,即使我从webconfig中删除自定义错误消息,消息也是一样的。这是一些可以覆盖的默认行为吗?我错过了一些重要的事情吗?
答案 0 :(得分:0)
而不是设置context.Result
使用以下代码
throw new HttpResponseException(context.Request.CreateResponse(code,
new ErrorInformation() { Message = message, DetailedMessage = detailed }));