是否有可能在Web API 2中直接在响应的状态中返回异常消息?
例如,如果我正在编写WCF服务(而不是Webi API),我可以按照this tutorial直接返回异常消息作为响应状态的一部分:
此处,Web服务不会在响应中返回任何数据,并且会在状态描述中直接返回错误消息。
这正是我希望我的Web API服务在发生异常时要做的事情,但我无法弄清楚如何做到这一点。
大多数建议建议使用如下代码,但随后错误消息将始终返回单独的响应字符串,而不是状态的一部分。
例如,如果我要使用此代码:
IHttpActionResult
...然后它返回一个通用500消息,并以JSON字符串返回异常。
有谁知道如何修改Web API函数(返回...
api = cf.SomeServiceAPI()
m1 = api.service.__getattr__('SomeMethod')
#Test1
def test_SomeMethod(self):
result = self.sender(self.m1, [setofvalue])
self.assertEqual(result, "Success", msg=result)
def sender(self, methodname, setofvalue):
result = method(setofvalue)
return result
对象)来执行此操作?
答案 0 :(得分:1)
您可以注册一个可以处理所有异常的自定义全局过滤器。类似的东西:
public class CatchAllExceptionFilterAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext context)
{
context.Response = new HttpResponseMessage(HttpStatusCode.InternalServerError)
{
Content = new StringContent(context.Exception.Message)
};
}
}
您需要在WebApiConfig.cs中注册:
config.Filters.Add(new CatchAllExceptionFilterAttribute());
每次系统中出现未处理的异常时,都会触发此过滤器,并将http响应设置为异常消息。您还可以检查不同类型的异常并相应地更改您的响应,例如:
public override void OnException(HttpActionExecutedContext context)
{
if(context.Exception is NotImplementedException)
{
context.Response = new HttpResponseMessage(HttpStatusCode.NotImplemented)
{
Content = new StringContent("Method not implemented.")
};
}
else
{
context.Response = new HttpResponseMessage(HttpStatusCode.InternalServerError)
{
Content = new StringContent(context.Exception.Message)
};
}
}
答案 1 :(得分:0)