0

デフォルトのルーティングがあるので、www.domain.com / app /にアクセスすると、たとえばHomeControllerになります。コントロールに別のアクションがあります。たとえば、helloworldですが、www.domain.com / app / helloworldにアクセスすると、404で失敗します(helloworldコントローラーが必要です)。

デフォルトのコントローラーでデフォルト以外のアクションを実行するにはどうすればよいですか、またはURL / app/helloworldをhelloworldアクションにマップするにはどうすればよいですか。私のルーティングは次のようになります。

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

routes.MapRoute( //this fails with same 404 like it does when it's ommitted
"Hello", // Route name
"app/helloworld", // URL with parameters
new { controller = "Home", action = "HellowWorld", id = UrlParameter.Optional } // Parameter defaults
);

基本的に私は必要です:

/ app / =>コントローラー=ホーム、アクション=インデックス

/ app / helloworld =>コントローラー=ホーム、アクション= HelloWorld、コントローラー= HelloWorldではなく、アクション-インデックス

/ app / other =>コントローラー=その他、アクション=インデックス

4

2 に答える 2

2

routesグローバルファイルの2を次のように置き換えます。

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

次に、次のものHomeControllerが含まれていることを確認します。

public ActionResult Index()
{
    return View();
}

public ActionResult HelloWorld()
{
    return View();
}

これが行っているのはyoursite.com/app/ANYCONTROLLER/ANYACTION、コントローラーとアクション(存在する限り)にルーティングすることです。デフォルトnew { controller = "Home", action = "Index"では、誰かがそこに行くとyoursite.com/app/、自動的ににルーティングされyoursite.com/app/Home/Indexます。

これが機能しない場合は、削除してみてください。次のapp/ようになります。

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

あなたがルーティングしようとしていたように見えyoursite.com/Home/Index、2番目のルートの言い回しが間違っていました。それが何をするかはわかりませんが、代わりにそのように"app/helloworld見えるはずでした。誰かが行った場合に自動的に表示されるようにします。それがいくつかのことを片付けるのに役立つことを願っています。"app/HelloWorld/{action}/{id}"new { controller = "Home", action = "HellowWorld"yoursite.com/appyoursite.com/app/Home/HelloWorld

これはあなたが望む答えです

何らかの理由で、hello worldセクションの新しいコントローラーを作成したくない場合はRegisterRoutesGlobalファイル内は次のようになります。

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

        routes.MapRoute(
            "Hello World", // Route name
            "App/HellowWorld/{id}", // URL with parameters
            new { controller = "Home", action = "HelloWorld", id = UrlParameter.Optional }
            );

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

私はそれについてこのようにすることをお勧めしませんが。

于 2012-08-18T04:47:01.823 に答える
0

これには1つのルートが必要です。アクションをハードコーディングする代わりに、変数にしますが、デフォルトを含めます。

routes.MapRoute( //this fails with same 404 like it does when it's ommitted
    "Hello", // Route name
    "app/{action}", // URL with parameters
    new { controller = "Home", action = "HelloWorld", id = UrlParameter.Optional } 
);

このように、www.domain.com / app /にアクセスすると、デフォルトのアクション(HelloWorld)が取得されます。ただし、ルート内のアクションをwww.domain.com/app/someotheractionとして指定することはできます。

また、最初に一致するルートが選択されていることに注意してください...したがって、デフォルトルートを最後に移動するか、完全に除外することを検討する必要があります。例www.domain.com/app/helloworldでは、デフォルトルートと一致し、コントローラーとしてapp 、アクションとしてhelloworldが使用されます(もちろん無効であるため、404)。

于 2012-08-18T04:19:32.890 に答える