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

できることの 1 つは、デフォルト ルートに Route Constraint を設定して、Account Controller のアクションと一致しないようにすることです。

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 に答える