3

この質問は、以前Stack Overflow他の場所で同様の方法で尋ねられましたが、同一ではありません (満足のいく解決にはなりませんでした) 。

Linux の世界から来て、ASP.NET MVC を使用したいのですが、同一の異なるケースのルートが同じページに解決されないようにします。すべてのルートを 100% 小文字にする必要はありません。

/Home/Somethingたとえば、有効なルートであり、有効なルートでもありたいのですが、またはでは/Home/somethingElseなく、で呼び出される 2 つの関数と./Home/something/home/somethingelseSomethingsomethingElseHomeController

関数内からこれを行う方法が見つかりませんが、RegisterRoutes明らかな何かが欠けているのではないでしょうか? 各コントローラー関数にコードを追加することで、これに簡単に答えることができますが、明らかにそれを避けようとしています。

最適な解決策として、特定のルートの順列をすべてキャッチし、コントローラーの関数の大文字と小文字が完全に一致しないものを 301 リダイレクトします。

4

1 に答える 1

2

大規模な検索を行った後、これを行う方法を見つけることができませんでした基本的に、大文字と小文字の区別と IIS/ASP.NET は明らかに一致しません。

私たちは今、これを解決するためにちょっとしたコツを使っています。コードは github: NeoSmart Web Toolkitでオープンソース化されています (MIT ライセンス)。特に、このファイルには SEO リダイレクト コードが含まれています

使い方は簡単です。コントローラー クラスの各 GET メソッドは、最初に次の 1 行を追加するだけです。

Seo.SeoRedirect(this);

SEO 書き換えクラスは、C# 5.0 の Caller Info 属性を自動的に使用して面倒な作業を行い、上記のコードを厳密にコピー アンド ペーストします。

理想的には、そのコード行を属性に変換する方法を見つけたいと思っています。たとえば、コントローラーのメソッドに接頭辞を付けると[CaseSensitive]、その行に書き込むのと同じ効果が自動的に得られますが、残念ながら、これを行う方法は (まだ) わかりません。

Routingまた、クラス/構造でこれを理解する方法が見つかりません。それはいくつかの不透明なコードです!

于 2012-11-06T06:51:17.840 に答える