0

私は MVC 4 で問題を抱えています。それは本当に些細なことだと思いますが、最後の日まで私を悩ませていて、理解できないようです。

私はこのURLを持っています:

http://www.example.com/my-dashed-url

次の名前のコントローラーがあります。

public class MyDashedUrlController: Controller
{
}

次のようなルートは 2 つしかありません。

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute("my-dashed-url",
               "my-dashed-url/{action}",
               new { controller = "MyDashedUrl", action = "Index" });

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home",
                            action = "Index",
                            id = UrlParameter.Optional }
        );

無事にインデックスにたどり着きました。ただし、これを行うと:

   public ActionResult Index()
    {
        if (NoUserIsLoggedOn)
            return RedirectToAction("Logon", "MyDashedUrl");

        return View();
    }

    public ActionResult Logon()
    {
        Contact c = GetContact();

        return View(c);
    }

「ログオン」アクションに正しくリダイレ​​クトされません。それは私を次のようにリダイレクトするはずです:

 http://www.example.com/my-dashed-url/logon

代わりに、次の場所にリダイレクトしようとします。

 http://www.example.com/logon

...動作しません (404 Not Found)

何かが足りない。誰でもそれを見つけることができますか?さらに情報が必要な場合は、お知らせください。

そして、このコントローラーで同じことを行うのはすべての RedirectToAction です。Html.BeginForm("Logon", "MyDashedUrl") も生成します: http://www.example.com/logon

私が定義したルートで何かをしなければならないと思いますが、それらはすべて同じであるため、問題のあるルートを見つけることができません。MVC からのデフォルトのルート以外のすべてのルートを無効にしても、問題は同じままです

4

1 に答える 1

1

デフォルトのルートよりもに、このカスタム ルートを宣言したことを確認してください。

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "my-dashed-url",
        "my-dashed-url/{action}",
        new { controller = "MyDashedUrl", action = "Index" }
    );

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );
}

ルートは、宣言した順序で評価されることに注意してください。そのため、リクエストに一致する最初のルートが使用されます。デフォルト ルートの後にカスタム ルートを宣言すると、リクエストに一致するのはデフォルト ルートになります。

于 2013-10-10T13:27:46.040 に答える