2009-04-23 10 views
3

私は最近、小さなasp.net mvcアプリケーションを変更して、urlのコントローラー名にダッシュが含まれるようにしました。たとえば、私がContactUsという名前のViewという名前のコントローラを作成し、URLを送信した場合、URLはhttp://example.com/ContactUshttp://example.com/ContactUs/Sentになります。変更を依頼した人には、URLがhttp://example/contact-ushttp://example.com/contact-us/sentであることが必要です。ASP.NET MVC URLのコントローラテキストをどのように変更しますか?

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

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

どうすればこの問題を解決できますか?

+0

ルーティングルールを設定していれば最も簡単でした。コントローラのクラスに入れて、コントローラーに近く、別の開発者が気がつかない別の場所には配置されないようにすることを望んでいました。これにより、古いルート/ ContactUs /はまだ動作します。 permリダイレクトを行うiis7 URLリライタを取得できるかどうかを確認することがあります。 助けてくれてありがとう! – Zack

+0

お寄せいただきありがとうございます。サイトへようこそ! –

答えて

9

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

routes.MapRoute(
    "Contact Us", 
    "contact-us/{action}/", 
    new { controller = "ContactUs", action = "Default" } 
); 
+0

よく見えます。これは(とリチャードの答え)おそらく良い解決策です。 – Kezzer

+0

ザックが解決策を構想した「方法」ではなく、より有効な方法であると私は信じています。このように、フレンドリURLの唯一の目的のためにコントローラ名を曲げる必要はありません。 –

2

コントローラの表示名を変更することはできません。ベータ版では、コントローラーの接尾辞が「コントローラー」のルートデータ「コントローラー」を使用してコントローラーが作成されました。これはRC/RTMで変更されている可能性がありますが、わかりません。

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

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" } 
); 
    ... 

リチャードSZALAYで述べたように、sentアクションを指定する必要はありません。 URLが.../sent部分を逃した場合、デフォルトでIndexアクションになります。

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

+0

/{action}を最初のパスに追加すると、2番目のルートは必要ありません。 –

0

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

EDIT:私は、カスタムルートを使用することができますが、これはおそらくこの場合の最適な解決策ではないと考えています。それをマッピングする前に{controller}を扱う方法がないかぎり?可能であれば、すべての " - "文字を置き換えることができます。

+0

その記事が彼が求めているものに関連しているかどうかはわかりません。 –

+0

乾杯 - あなたはそれが今日の終わりだと言うことができます、私は物事を正しく読んでいないよ! – Kezzer

関連する問題