如何在ASP.NET MVC5中的操作上处理不受支持的HTTP方法?

时间:2019-01-03 19:41:10

标签: asp.net asp.net-mvc-5

如何处理对已存在但不支持http方法的操作的请求?

例如,我有以下操作:

[HttpGet]
[Route("~/")]
[Route("ServiceVisits")]
public ActionResult Index()
{
    return View();
}

如果向GEThttp://localhost:59949/发出了http://localhost:59949/ServiceVisits请求,那么我们将返回页面,但是,如果出现POST请求,那么我的{我必须处理的Application_Error中的{1}}方法。

执行不存在的操作的请求将返回一个Global.asax.cs页面,因为我有以下路线:

404

我使用的是“属性路由”,上面的约定是我处理404的唯一约定。

我只想在routes.MapRoute( "PageNotFound", "{*.*}", new {controller = "Error", action = "NotFound"} ); 中记录严重的系统错误,而不在Application_Error异常中记录。谢谢!

1 个答案:

答案 0 :(得分:0)

最后,我决定只检查Application_Error中的404,并避免记录这些错误,如下所示:

protected void Application_Error()
{
    var ex = Server.GetLastError();
    if (ex is HttpException httpEx)
    {
        var httpCode = httpEx.GetHttpCode();
        Context.Response.StatusCode = httpCode;

        if (httpCode != (int) HttpStatusCode.NotFound)
        {
            Logger.Error(ex, "Unhandled HttpException in Application_Error");
        }
    }
    else
    {
        Context.Response.StatusCode = (int) HttpStatusCode.InternalServerError;
        Logger.Fatal(ex, "Unhandled exception in Application_Error");
    }

    Context.Server.ClearError();
    Context.Response.TrySkipIisCustomErrors = true;
}