1

動的にページを追加したいサイトを作成しています。そのため、もっとシンプルなURLが欲しいです。私が目指しているのは、次のようなURLです。

http://www.mysite.com/my-page-url

次のようなURLではなく:

http://www.mysite.com/pageController/my-page-url

MVC URLは、次のように機能する傾向があります。|url|/|controller|/|action|/|params|

私がしたいのは持っていることです:|url|/|params|

上記のURLで、paramsの値がコントローラーの名前と等しくない場合は、それらのparamsをPageContoller.ProcessDynamicPageに渡します。

4

3 に答える 3

3

デフォルトのパラメータに応じて、ルート制約を作成できます

    routes.MapRoute(
        "Default",
        "{Param1}",
        new { controller = "ProcessDynamicPage", action = "YourAction" },
        new {Param1= @"\d+" }
    );

これは、パラメーターが整数の場合に機能します。

デフォルトのパラメータが文字列などであり、正規表現を作成できない場合、または正規表現を実装できないIRouteConstraint場合は、すでに設定されているデフォルトを通過したときに、各コントローラに一致するアクションを作成するための最善の策を実行できません。マッチングを試みました。

routes.MapRoute(
    "YourController",
    "YourController\{Param1}",
    new { controller = "YourController", action = "YourAction" }
   }
);

routes.MapRoute(
    "YourController2",
    "YourController2\{Param1}",
    new { controller = "YourController2", action = "YourAction" }
     }
);

routes.MapRoute(
    "Default",
    "{Param1}",
    new { controller = "ProcessDynamicPage", action = "YourAction" }          
);

コントローラーがたくさんある場合は、期待しているものの制約を作成する方法を実際に調べる必要があります。

于 2012-08-26T13:15:46.340 に答える
2

MVCのデフォルトのルーティングスキームを使用して、コントローラーhttp://www.mysite.com/my-page-urlのインデックスアクションに移動します。my-page-urlデフォルトのコントローラーとアクションを設定する場合は、Global.asax.csファイルで次のように設定できます。

routes.MapRoute(
    "Default",                                              // Route name
    "{action}/{pageName}",                           // URL with parameters
    new { controller = "PageContoller", action = "ProcessDynamicPage", pageName = "" }  // Parameter defaults
);

アップデート

追加のルートをサポートする必要がある場合は、MarkOretaが提案した種類のアプローチを使用してルートを作成できます。ScottGuのブログこのチュートリアルをご覧ください。

于 2012-08-26T12:59:47.387 に答える
1

IIS 7では、ハンドラーマッピングを確認する必要があります。デフォルトのコントローラーによって処理される特定の拡張子(* .actionなど)を指定できます。今は少し錆びていますが、IIS 6でも基本的に同じ考えだと思います。.Net2.0アプリケーションのweb.configファイルでは、system.webServerタグ内に次のセクションがあります。

    <system.webServer>
        <handlers>
            <add name="defaultAction" path="*.action"   
                verb="*" 
                type="SumikinIntercom.Web.Controller.Controller,SumikinIntercom.Web.Controller" 
                resourceType="Unspecified" requireAccess="None" allowPathInfo="true" />
        </handlers>

したがって、拡張子が.actionのURLはすべて、デフォルトのControllerクラスによって処理されます。厄介な構文に注意してください。完全修飾クラス名(アセンブリ名を含む)、コンマ、完全修飾アセンブリ名を指定する必要がありました。

.Netのより最新のバージョンでは、構文が苛立たしい変更になる可能性があるため、それらに注意してください。

于 2012-08-26T13:06:25.267 に答える