3

最近、URLのコントローラー名にダッシュが含まれるように小さなasp.netmvcアプリケーションを変更するように求められました。たとえば、Indexという名前のビューを持つContactUsという名前のコントローラーを作成し、URLを送信した場合、URLはhttp://example.com/ContactUsおよびhttp://example.com/ContactUs/Sentになります。変更を依頼した人は、URLをhttp://example/contact-usおよびhttp://example.com/contact-us/sentにする必要があります。

'-'はクラス名の不正な文字になるため、コントローラーの名前を変更できるとは思いません。

コントローラがURLで使用する文字列を指定できるコントローラクラスに適用できる属性を探していましたが、まだ見つかりませんでした。

どうすればこれを達成できますか?

4

4 に答える 4

9

ルート自体で使用されているURLを変更して、既存のコントローラーを指すようにするだけです。Global.asaxで:

routes.MapRoute(
  "Contact Us",
  "contact-us/{action}/",
  new { controller = "ContactUs", action = "Default" }
);
于 2009-04-23T15:52:56.770 に答える
2

コントローラの表示名を変更できるとは思いません。ベータ版では、コントローラーはルートデータ「controller」と「Controller」サフィックスを使用して作成されました。これはRC/RTMで変更された可能性がありますが、よくわかりません。

「contact-us/{action}」のカスタムルートを作成し、デフォルト値を指定した場合:new { controller = "ContactUs" }目的の結果が得られるはずです。

于 2009-04-23T15:52:09.253 に答える
1

ルーティングを構成する必要があります。Global.asaxで、次の手順を実行します。

public static void RegisterRoutes(RouteCollection routes)
{
  ...
  routes.MapRoute(
    "route-name", "contact-us/{action}", // specify a propriate route name...
    new { controller = "ContactUs", action = "Index" }
  );
  ...

Richard Szalayが指摘したように、sentアクションを指定する必要はありません。URLがその部分を見逃している場合、.../sentデフォルトでIndexアクションになります。

にルートを追加するときは、ルートの順序が重要であることに注意してくださいRouteCollection。最初に一致したルートが選択され、残りは無視されます。

于 2009-04-23T15:55:30.647 に答える
0

ASP.NET MVC開発者の1人が、Iconicが話していることをカバーしています。これは私が今日実際にhaackedで見ていたものでした。MVCアーキテクチャのカスタムルートを確認する価値があります。

編集:ああ、そうですね、カスタムルートを使用することもできますが、この場合はおそらく最善の解決策ではありません。{controller}それをマッピングする前に対処する方法がない限り?それが可能であれば、すべての「-」文字を置き換えることができます。

于 2009-04-23T15:56:09.010 に答える