Asp.net mvc ASP.NET MVC-如果指定了强制参数,则防止回退到默认路由
我有以下路线:Asp.net mvc ASP.NET MVC-如果指定了强制参数,则防止回退到默认路由,asp.net-mvc,parameters,routing,Asp.net Mvc,Parameters,Routing,我有以下路线: routes.MapRoute( "SetPassword", "Account/SetPassword/{token}", new { controller = "Account", action = "SetPassword" } ); 我希望代币是强制性的。但问题是,如果令牌丢失,路由将返回默认路由: routes.MapRoute( name: "Default",
routes.MapRoute(
"SetPassword",
"Account/SetPassword/{token}",
new { controller = "Account", action = "SetPassword" }
);
我希望代币是强制性的。但问题是,如果令牌丢失,路由将返回默认路由:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
如果有人输入这样的地址,我想返回404notfound
如何指定令牌是强制参数,并且如果控制器和操作名称与规范匹配,则路由必须在此路由停止?可以做的一件事是在默认路由上设置路由约束,防止其与帐户控制器中的任何操作匹配:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home",
action = "Index",
id = UrlParameter.Optional },
constraints: new RouteValueDictionary { { "controller", "^(?!Account$).*" } }
);
如果令牌为空,您可以做的另一件事是在操作中抛出HttpException
public ActionResult SetPassword(string token)
{
if (String.IsNullOrEmpty(token))
{
throw new HttpException(404, "Page not found");
}
ViewBag.Token = token;
return View();
}