0

仕事中に、URL 書き換えの問題を 1 つ解決しなければなりません。テンプレートとして URL を使用する必要があります。

{controller}/{action}-{id}

それ以外の

{controller}/{action}/{id}

処理された URL は次のようになります。

myController/myAction-128

ここで、128 はパラメータです

私のルートマップ:

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

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

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

コントローラーコード:

[HttpGet]
        public ActionResult DocumentDetails(int? id)
        {
            if (doc.HasValue)
            {
              ...
            }
        }

このルートでは、成功した結果は得られません。まだ 404 エラーがあります。「-」の代わりに / を使用すると、すべて問題ありませんが、JS View 環境が機能しません。

これを修正するために何かできることはありますか? すべての助けに感謝します、ありがとう。

4

2 に答える 2

4

ルートは定義した順序で評価されるため、同じ順序を尊重してください。idまた、 (たとえば数値として)の制約を追加すると、ルーティング エンジンがルートを明確にするのに役立ちます。あなたの例では、id トークンをオプションにしたことは言うまでもありませんが、これはもちろん不可能です。ルートの最後の部分のみをオプションにすることができます。

そう:

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

    routes.MapRoute(
        name: "NewRoute",
        url: "{controller}/{action}-{id}/{extId}",
        defaults: new { controller = "Home", action = "Index", extId = UrlParameter.Optional },
        new { id = @"\d+" }
    );

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}
于 2013-03-24T14:37:08.480 に答える
0

あなたのリクエストは最初のルーティング ルールによって処理されていると思いますが、action-id はアクション全体と見なされ、見つかりません。

Default ルートの前に NewRoute を設定します。コードを上に移動するだけです。

于 2013-03-24T14:39:54.137 に答える