Web API 2服务 - 如何在状态中返回异常消息

时间:2017-01-24 09:03:08

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

是否有可能在Web API 2中直接在响应的状态中返回异常消息?

例如,如果我正在编写WCF服务(而不是Webi API),我可以按照this tutorial直接返回异常消息作为响应状态的一部分:

enter image description here

此处,Web服务不会在响应中返回任何数据,并且会在状态描述中直接返回错误消息。

这正是我希望我的Web API服务在发生异常时要做的事情,但我无法弄清楚如何做到这一点。

大多数建议建议使用如下代码,但随后错误消息将始终返回单独的响应字符串,而不是状态的一部分。

例如,如果我要使用此代码:

IHttpActionResult

...然后它返回一个通用500消息,并以JSON字符串返回异常。

enter image description here

有谁知道如何修改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 对象)来执行此操作?

2 个答案:

答案 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)

https://www.asp.net/web-api/overview/error-handling/web-api-global-error-handling 请参考上面的链接,它会对你有所帮助!