12

私が尋ねている理由は、IISがBin、App_Data、App_Codeなどの特定のASP.NETフォルダーを保護するためです。URLが実際のファイルシステムフォルダーにマップされていない場合でも、IISはパスセグメントが次のいずれかに等しいURLを拒否します。言及された名前。

これは、私がこのようなルートを持つことができないことを意味します:

{controller}/{action}/{id}

...ここで、idは任意の文字列にすることができます。

Catalog/Product/Bin

したがって、このセキュリティ対策を無効にする代わりに、次のようにIDの前にサフィックスを使用してルートを変更します。

{controller}/{action}_{id} // e.g. Catalog/Product_Bin
{controller}/{action}/_{id} // e.g. Catalog/Product/_Bin

ただし、IDに新しいデリメータが含まれている場合、これらのルートは機能しません。この場合は、たとえば、

// These URL won't work (I get 404 response)
Catalog/Product_Bin_
Catalog/Product/_Bin_
Catalog/Product/__Bin

なんで?わからない、私にはバグのように見える。これらのルートを機能させるにはどうすればよいですか?idは任意の文字列にすることができますか?

4

3 に答える 3

7

わかりました、私は決定的な答えがあります。はい、これはバグです。ただし、現時点では、いくつかの理由で修正する予定がないことを残念に思います。

  • これは重大な変更であり、それに気付くのは非常に難しいかもしれません。
  • 簡単な回避策があります。

あなたができることは、アンダースコアを持たないようにURLを変更することです:

{controller}/{action}/_{id}

次に、IDパラメーターがアンダースコア文字で始まることを要求するルート制約を追加します。

次に、アクションメソッド内で、idパラメーターからアンダースコアプレフィックスを削除します。必要に応じて、これを行うためのアクションフィルターを作成することもできます。ご不便おかけしてすみません。

于 2011-09-19T19:17:35.220 に答える
0

次のようなディレクトリまたはファイル名に許可されていない文字を使用できます:*、?、:、 "、<、>、|。

于 2011-04-20T23:13:57.900 に答える
0

ASP.NET MVCでは、ソースを見ると、パス区切り文字(/)の値がハードコードされており、私の知る限り変更することはできません。

于 2011-04-21T00:32:22.363 に答える