Можно ли включить некоторую статическую проверку для помощников тегов?

Например, я могу написать этот код в шаблоне MVC по умолчанию

<a asp-area="" asp-route-returnUrlFoo="foo" 
   asp-controller="Account" asp-action="RegisterFoo">Register</a>

И это будет генерировать неправильный URL

/Account/RegisterFoo?returnUrlFoo=foo

Можно ли выдать ошибку, если указано неправильное имя действия или аргумент маршрута?

1 ответ

Резервный метод: универсальная обработка несоответствующего контроллера и действий

Вы можете добавить новый маршрут, который перенаправит все ваши недействительные запросы на ваш собственный контроллер и действие:

app.UseMvc(routes =>
{
    // your other routes here

    routes.MapRoute(_
        name: "Fallback",
        url: "{*any}",
        defaults: new { controller = "Error", action = "Handler"});
}

В приведенном выше случае это сопоставит все (что не определено) для перехода к /Error/Handler, Вы можете изменить это, чтобы удовлетворить ваши собственные требования.

Вы можете прочитать больше о шаблонах маршрутов здесь:
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/routing


Альтернатива: справиться с этим на контроллер

Конечно, есть альтернатива, которая заключается в том, чтобы просто иметь дело с ним на основе контроллера. Этот подход менее универсален и позволит вам создавать более целенаправленные способы обработки ошибок URI / маршрутизации.

Альтернатива: проверьте, существует ли контроллер или действие

string actionName = this.ControllerContext.RouteData.Values["action"].ToString();
string controllerName = this.ControllerContext.RouteData.Values["controller"].ToString();
Другие вопросы по тегам