ASP.NET覆盖所有标准的http错误响应

时间:2017-02-07 17:28:42

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

我创建了一个自定义对象,用于为所有错误生成json错误响应。我遇到的问题是有一些我无法捕获的错误。例如,如果我尝试调用不支持GET的操作,则默认响应为

  

{" Message":"请求的资源不支持http方法   ' GET'"}

这很好,但我想控制格式。我想控制这样的每一个自动错误,所以我可以确保没有任何东西得到输出,我不想输出。我需要能够优雅地让客户知道是否发生代码异常。

我发现了这个,这似乎是我正在寻找的东西,但它似乎没有抓住错误,因为没有匹配的动作。 How to override all standard error pages in WebAPI

我试图实现这个,但即使我在主控制器中有这个,我仍然从上面得到相同的错误信息。

[AllowAnonymous]
[ActionName("405")]
[HttpGet]
public string Status405()
{
    return "error";
}

我希望会有一个错误的事件或什么东西可以作为一个捕获所有,所以我可以覆盖一切。我尝试基于HttpResponseEx

工作
public class ErrorFilter : System.Web.Http.HttpResponseException
{
    public override string Message
    {
        get
        {
            return "My custom response based on whatever params are in this error";
        }
    }
}

这也不起作用,我可以看到为什么因为它没有触及任何被触发的事件。

当然有办法做到这一点。通常如何完成?

1 个答案:

答案 0 :(得分:0)

在web.config中,您需要打开自定义错误。默认情况下,它设置为remote,这允许开发人员查看堆栈跟踪,最终用户可以看到一个不错的错误页面。您想将此设置为开。有关详细信息,请参阅此处https://msdn.microsoft.com/en-us/library/h0hfz6fc(v=vs.85).aspx