Как обрабатывать неподдерживаемые методы HTTP для действий в ASP.NET MVC5? - PullRequest
0 голосов
/ 03 января 2019

Как мне обрабатывать запросы к действиям, которые существуют, но не поддерживают метод http в запросе?

Например, у меня есть следующее действие:

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

ЕслиGET запрос приходит к http://localhost:59949/ или http://localhost:59949/ServiceVisits, тогда мы получаем страницу обратно, но если приходит запрос POST, то в моем методе Application_Error в Global.asax.cs возникает исключение, с которым мне приходится иметь делос.

Запросы, поступающие на несуществующие действия, будут возвращать страницу 404, потому что у меня есть следующий маршрут:

routes.MapRoute(
    "PageNotFound",
    "{*.*}",
    new {controller = "Error", action = "NotFound"}
);

Я использую маршрутизацию атрибутов и вышеуказанное соглашениемой единственный для обработки 404.

Я хочу регистрировать только серьезные системные ошибки в Application_Error, а не No matching action was found on controller исключений.Спасибо!

1 Ответ

0 голосов
/ 06 января 2019

В конце концов я решил просто проверить 404 в Application_Error и не регистрировать эти ошибки, например:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...