0

我有以下路线:

    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 之类的地址,我想要返回

如果控制器和操作名称与规范匹配,我如何指定令牌是强制参数并且路由必须在此路由处停止?

4

1 回答 1

1

您可以做的一件事是在您的默认路由上放置一个路由约束,防止它匹配帐户控制器中的任何操作:

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", 
                        action = "Index", 
                            id = UrlParameter.Optional },
    constraints: new RouteValueDictionary { { "controller", "^(?!Account$).*" } }
);

如果 Token 为空,您可以做的另一件事是在您的操作中抛出 HttpException。

public ActionResult SetPassword(string token)
{
    if (String.IsNullOrEmpty(token))
    {
        throw new HttpException(404, "Page not found");
    }
    ViewBag.Token = token;
    return View();
}
于 2013-07-31T22:38:51.470 回答