2013-07-31 59 views
0

我有以下途徑:ASP.NET MVC - 防止回退到默認路由,如果強制參數指定

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

如何指定地址令牌是強制性參數,並且如果控制器和動作名稱符合規範,則路由必須在此路由處停止?

回答

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(); 
}