2

特定のアクション名が提示された場合にコントローラー名を無視する MVC4 のルートを指定しようとしています。例えば。

mysite.com/AnyControllerNameHere/SpecificAction - 使用するコントローラーとアクションを指定できますか?

mysite.com/AnyControllerNameHere/NotSpecificAction - MVC のデフォルトのように、AnyControllerNameHere コントローラーと NotSpecificAction メソッドを使用します。

私は何かをコーディングしようとしましたが、私が望むことをしていないようです。完全なルート構成は、MVCのデフォルトに加えて、これを実行しようとしているだけです...

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

       routes.MapRoute(
            "SpecificAction",
            "{controller}/SpecificAction",
            new { controller = "Home", action = "SpecificAction" }
            );


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

3 に答える 3

1

これを行う最も簡単な方法は、Route 制約を使用することです。

routes.MapRoute(
    "SpecificAction",
    "{anyController}/{specificAction}",
    new {controller="Home", action="SpecificAction"},
    new {specificAction = "SpecificAction" }
 );

ここで重要なのは、デフォルトの {controller} と {action} を使用するのではなく、別のもの (何でもかまいません) を使用し、ルート制約を使用してそれを SpecificAction アクションにロックすることです。

Wim の方法も同様に機能します。

于 2013-04-07T04:36:41.337 に答える
0

これが MVC の組み込みルーティングで簡単に実現できるとは思えません。カスタム ルート ハンドラを作成することを検討するか、代わりに次のようなことを実行して、デフォルト ルートにジョブを実行させることができます。

public class BaseController : Controller
{
    public ActionResult SpecificAction()
    {
        return RedirectToAction("SpecificAction", "Home");
    }
}

public class SomeController : BaseController
{
    /* ... */
}

public class HomeController : BaseController
{
    public override ActionResult SpecificAction()
    {
        /* Do whatever */
    }
}
于 2013-04-06T20:00:57.157 に答える