我有以下路线:
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 }
);
如果有人输入了类似的地址,我想要的是返回404 Not Found
http://mysite.com/Account/SetPassword
如果控制器和操作名称与规范匹配,如何指定令牌是必需参数并且路由必须在此路由处停止?
答案 0 :(得分:1)
您可以做的一件事是将路由约束放在默认路由上,防止它匹配帐户控制器中的任何操作:
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();
}