4

ASP.NET MVC3 で検索ページを作成しています。

アクションを呼び出す URL は次のとおりです。

http://mydomain/Search?q=searchterm

キーワード「web.config」を検索すると正常に動作します。

http://mydomain/Search?q=web.config

しかし今、私はURLを次のようにしたい:

http://mydomain/Search/searchterm

ルートをglobal.asaxに追加してこれを行いましたが、「web.config」を検索http://mydomain/Search/web.configすると、サーバーが要求を終了するように、検索ディレクトリ内の物理的なweb.configファイルを要求していると見なされるためです。

ファイルのリクエストではなく、検索アクションのパラメータとして、asp.netにURL「search/{q}」の{q}を考慮させる方法はありますか?

4

2 に答える 2

1

RegisterRoutesGlobal.asax、既存のファイルに対するリクエストがルーティング エンジンを通過できるようにすることができます。

routes.RouteExistingFiles = true;

これを行うと、すべての要求が ASP.NET MVC ルーティング エンジンを通過することに注意してください。したがって、破損した画像や JavaScript および CSS 参照を表示したくない場合は、それらを明示的に除外する必要があります。

routes.IgnoreRoute("scripts/{resource}.js");
routes.IgnoreRoute("content/{resource}.css");
routes.IgnoreRoute("iamges/{resource}.png");
routes.IgnoreRoute("iamges/{resource}.jpeg");
...

また、IIS 7 以降でアプリケーションをホストしている場合は、一般的なファイルの提供を妨げるいくつかのセキュリティ フィルターを削除する必要がありweb.configます.config

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
    <security>
      <requestFiltering>
        <fileExtensions>
          <remove fileExtension=".config"/>
        </fileExtensions>
        <hiddenSegments>
          <remove segment="web.config"/>
        </hiddenSegments>
      </requestFiltering>
    </security>
</system.webServer>
于 2012-07-02T07:43:03.780 に答える
0

これを行うには、IIS の URL Rewriter モジュールを使用できます。から必要なロジックを削除しGlobal.asax、URL を簡素化するために Web サイト全体で使用できるようにします。

リライタモジュール

リライタ ルールの追加

ルールの例:

<rewrite>
  <rules>
    <rule name="Rewrite to search">
      <match url="^search/([_0-9a-z-]+)" />
      <action type="Rewrite" url="search.aspx?q={R:1}" />
    </rule>
  </rules>
</rewrite>
于 2012-07-02T07:47:24.863 に答える