Razor 是否可以为标记助手启用一些静态检查?
例如,我可以在默认mvc模板中编写此代码Razor 是否可以为标记助手启用一些静态检查?,razor,asp.net-core,asp.net-core-mvc,tag-helpers,Razor,Asp.net Core,Asp.net Core Mvc,Tag Helpers,例如,我可以在默认mvc模板中编写此代码 <a asp-area="" asp-route-returnUrlFoo="foo" asp-controller="Account" asp-action="RegisterFoo">Register</a> 当操作名称或路由参数不正确时,是否可能引发错误?回退方法:“通用”处理不匹配的控制器和操作 您可以添加一个新路由,将所有无效请求重定向到您自己的特定控制器和操作: app.UseMvc(routes =>
<a asp-area="" asp-route-returnUrlFoo="foo"
asp-controller="Account" asp-action="RegisterFoo">Register</a>
当操作名称或路由参数不正确时,是否可能引发错误?回退方法:“通用”处理不匹配的控制器和操作
您可以添加一个新路由,将所有无效请求重定向到您自己的特定控制器和操作:
app.UseMvc(routes =>
{
// your other routes here
routes.MapRoute(_
name: "Fallback",
url: "{*any}",
defaults: new { controller = "Error", action = "Handler"});
}
在上述情况下,这将映射所有(未定义的)到/Error/Handler
。您可以对此进行修改以满足自己的需求
您可以在此处阅读有关路由模板的更多信息:备选方案:按控制器处理 当然,还有另一种选择,那就是在控制器的基础上处理它。这种方法不太通用,可以让您创建更多有针对性的方法来处理URI/路由错误 备选方案:检查控制器或操作是否存在
说清楚
/Account
是有效的控制器,/RegisterFoo
是无效的操作吗?此外,您希望您的主机引发异常?或者你的意思是,用一个特定的状态代码来响应,比如400-错误的请求?@Svek是的,RegisterFoo是一个无效的操作。是,引发异常。我不希望/Account/RegisterFoo?returnUrlFoo=foo
正常工作,因为此url不正确。我只需要一个异常。@ais您的控制器可以引发该异常。当使用此url的页面被删除时,我需要一个异常rendering@ais我为您添加了另一个可能的替代方案,您可以使用。这将允许您将错误检查准确地放置在所需的位置。
app.UseMvc(routes =>
{
// your other routes here
routes.MapRoute(_
name: "Fallback",
url: "{*any}",
defaults: new { controller = "Error", action = "Handler"});
}
string actionName = this.ControllerContext.RouteData.Values["action"].ToString();
string controllerName = this.ControllerContext.RouteData.Values["controller"].ToString();