Можно ли включить некоторую статическую проверку для помощников тегов?
Например, я могу написать этот код в шаблоне 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();