2

URLルーティングとIIS72011年3月24日午後4時24分

やあ、

asp.net4.0およびIIS7のURLルーティングに関するクエリがあります。以下に、私のWebサイトの構造と、IIS7での構成方法について説明しました。

ディレクトリ構造:

1.MyWebsite> Index.aspx

2.MyWebsite> AboutUs> Index.aspx

3.MyWebsite> ContactUs> ContactUs.aspx

II7構成:

アプリケーションのデフォルトドキュメントをIndex.aspxとして構成しました。これで、以下のURLにアクセスすると、IIS7は自動的にルーティングをほとんど実行しません(これまで、global.asaxにルートを追加していないことに注意してください)。

1.localhost/MyWebsiteはlocalhost/MyWebsite/Index.aspxに転送されますOk!!

2.localhost / MyWebsite/Aboutusはlocalhost/AboutUs / Index.aspxに転送されます(このリダイレクトは、親レベルのデフォルトドキュメントがAboutUsフォルダーに継承されるため実行されます)Ok !!

3.localhost / MyWebsite / ContactUs == Httpエラー403.14禁止(このエラーは、ConactusフォルダーにIndex.aspxが見つからないためIIS7によってスローされます)問題ありません!!

localhost / MyWebsite/ContactUsをlocalhost/MyWebsite / ContactUs / Index.aspxにルーティングするために、global.asaxのRegisterRoutes()メソッドに以下のコードを追加しました。これで要件が満たされることを期待しています。

routes.MapPageRoute('ConactUs','ContactUs','~/ContactUs/ContactUs.aspx');

したがって、localhost / MyWebsite / ContactUsにアクセスしても、同じForbiddenエラーが発生します。では、ルートでのIIS7のデフォルトのページ設定では、ルートが機能しませんか?

各フォルダにIndex.aspxページがある場合、それは/Contactus/Index.aspxへのリダイレクトで機能します...しかし、すべてのページにIndex.aspx(デフォルトのドキュメント)がない場合はどうなりますか?

ありがとう&親切よろしく、m。

4

3 に答える 3

1

これが機能しない理由は、IISハンドラーがフォルダー "ContactUs"が存在することを検出し、ASP.NETハンドラーに渡すのではなく要求に応答しているためです。(たとえば、実際の物理フォルダーが「ContactUs」ではなく「ContactUs1」と呼ばれ、ルートが「〜/ contactus1 / contactus.aspx」を指すように更新された場合、ルーティングが機能することがわかります)。

この場合の最も簡単な解決策は、「ContactUs」サブフォルダーのデフォルトドキュメントとして「ContactUs.aspx」を設定することです。これを行うには、以下のXMLセクションを使用してweb.configをContactUsフォルダーに追加します。

<configuration>
    <system.webServer>
        <defaultDocument>
            <files>
                <add value="ContactUs.aspx" />
            </files>
        </defaultDocument>
    </system.webServer>
</configuration>
于 2011-03-28T22:47:59.247 に答える
1

さて、これが私が私のために物事を行うためにしたことです。まず最初に、私のプロジェクトについてもう少し詳しく説明します。

ディレクトリ構造:

1.MyWebsite> Index.aspx

2.MyWebsite> AboutUs> Index.aspx

3.MyWebsite> ContactUs> ContactUs.aspx

私のすべてのページには、logo.ascxという名前のUserControlがあります。logo.ascxには、ファイルの背後にあるコードが添付されていません。それはresolve.clienturl()メソッドを持つhtmlを持っているだけです。そして、logo.ascxには以下の属性があります。<%@ Control Language = "C#"%>

だから、すべてを機能させるために、私はいくつかのことをしました、

  1. ディレクトリごとに、必要に応じて異なるデフォルトドキュメントを選択しました。したがって、ディレクトリが参照されるたびに、選択したデフォルトページに自動的にルーティングされます。
  2. 非ディレクトリブラウジング用にglobal.asaxファイルにルートを追加しました。
  3. RouteExistingFiles=trueにしました。
  4. 次に、追加したルートが何であれ、そのページへのすべての直接リンクを短縮URLに置き換えたことを確認しました。プロジェクト全体でlocalhost/MyWebsite / ContactUs/ContactUs.aspxをlocalhost/MyWebsite / ContactUsに置き換えたように(メニュー、サブメニューなど)。
  5. しかし、これをすべて行うと奇妙な問題が発生し、ロゴ画像を見ることができませんでした。私はresolve.cienturl()を使用したことを確信しており、ルーティング以外のすべてのページで正常に機能していました。ただし、ルートが追加されたページの場合のみ、画像は表示されませんでした。これを機能させるには、logo.ascxにコードビハインドファイルを追加するだけで、魔法のように機能しました。

urのサポートと提案をありがとうnaraenありがとうpauli。

于 2011-04-09T13:25:48.303 に答える
0

のRouteExistingFilesプロパティを見ましたかRouteCollection。これにより、既存のファイルやフォルダにルーティングを使用するかどうかを指定できます。デフォルト値はfalseです。これは、ルートとファイルまたはフォルダーの間にすでに衝突がある場合、ルートが無視されることを意味します。

于 2011-03-29T03:35:35.483 に答える