web-dev-qa-db-ja.com

ASP.NET MVCeurl.axdエラー

次の手順を使用します。

(私はチェックしました この同様の投稿 、それは私の問題を解決しません。)

  1. Windows Server 2003/IIS6で、「testapp」という新しいサイトを作成します
  2. VS2010では、新しいASP.NET MVC2アプリケーションを作成します。
  3. 次のコードで「Info」というビューを追加します。

    <h2>System</h2>
    
    <h3>Request</h3>
    
    <%
        foreach (string key in Request.Headers)
        {
            Response.Write(string.Format("<p>{0}={1}</p>"
                    , key
                    , Request.Headers[key])
                    );
        }
    
    
    %>
    

標準のヘッダーに加えて、私はこれを見ます:

   X-REWRITE-URL=/home/info/eurl.axd/e3299f29f8043d4f8a27e0f1d0c40971

Helicon ISAPI Rewrite を使用しています。これは、「X-REWRITE-URL」ヘッダーを生成しています。

私の問題はこれです:/eurl.axd?....はどこから来ていますか?私は この記事 を見てきましたが、これは新しいアプリプールを持つ新しいフォルダー内の空白のアプリであるため、このWebフォルダー内で実行されている2.0。*アプリはありません。別のディレクトリなどを指す仮想フォルダはありません。サイトは、正しく登録されているASP.NET4.0用に構成されています。

問題は、eurl.axdがMVCルートのパラメーターをねじ込んでいることです。

このアプリには2.0コンポーネントがなく、拡張子のないURLを使用する必要があるため、「ASP.NET4.0の重大な変更」の記事のオプションは実際には機能しません。

UpdateGACのSystem.Web.MVCがバージョン2.0.0.0であることに気づきました。 VS2010と4.0フレームワークのインストールでこれを4.0に更新する必要がありますか?

デフォルトのASP.NETMVC2アプリケーションでこのエラーが表示される理由がわかりません。助けて!!

2011年2月更新-解決済み

ついにレジストリハックを介して拡張子のないURLを無効にしようとしたところ、問題は解消されました。拡張子のないURLを無効にすると(IIS6のワイルドカードマッピングを使用して)拡張子のないURLが機能することは直感に反しますが、取得できるものを使用します。

2014年12月更新

(メリー|ハッピー|平和)(クリスマス|ハヌカ|クワンザ| 12月)。

私は、他のすべてのWindowsUpdateがレジストリの変更を無効にしたことを言及するのを忘れました。これは、http://site.dom/bobへの要求が失敗し、http://site.dom/bob/が成功するという奇妙な問題として現れました。楽しんで! (末尾のスラッシュに注意してください。)

30
3Dave

これは、拡張子のないURLをデフォルトでASP.NETv4で処理できるようにするMicrosoftのアプローチの一部ですIIS 6.ここでは ASPNET V4の重大な変更 ドキュメント。(そのドキュメントでeurl.axdを検索します)。これはASPNETv4でのみ発生します。

何が起こるか:

  1. aspnet_filter.dll、ASPNETを実装するグローバルISAPIフィルター([Webサイト]フォルダーを右クリック> [プロパティ]をクリックして表示)は、各受信URLを検査します。拡張子のないURLの場合、ASPNETはURLをマングルして、/eurl.axd/some-long-numberを挿入します。実際、長い数字はダッシュのないGUIDです。

  2. 次に、サイト固有のISAPIフィルターであるURLリライターが実行され、マングルされたURLが表示されます。ルールは、その奇数シーケンスが挿入されたURLを想定していないため、書き換えフィルターはそれを適切に処理せず、ユーザーはおそらく404になります。

これは、IIS6およびASPNET v4とともにインストールされた場合、任意の書き換えフィルター(Helicon ISAPI_Rewrite、IIRFなど)で発生します。また、他のISAPIフィルター(明示的にリライターではないフィルター)でも発生する可能性があります。

Microsoftが意図したこと

  1. aspnet_filter.dll ISAPIfilterは、拡張子のないURLに/eurl.axd/some-long-numberを追加します。 (URLに拡張子が含まれている場合は、そのままにして、マネージコードにヒットすることによるパフォーマンスへの影響を防ぎます。)これは、「。axd」をそこに取得するだけなので、IIS6はデフォルト構成でaspnet_isapi.dll ISAPIextension(アプリケーション)。

  2. aspnet_isapi.dll ISAPIapplicationはリクエストを取得し、/eurl.axd/some-long-numberを削除してURLのマングルを解除し、拡張子のないURLを処理するように設計されたASP.NETコードに渡します。そのコードはリクエストを処理し、/ eurl.axd/some-long-numbershenanigansがこれまでに発生したことを認識していません。

Microsoftは、手順1と2の間にあるURL検査ISAPIフィルターで何が起こるかを検討できませんでした。ASP.NET4リリースノートには、このエラーの原因となる.NET2.0アプリケーションに関するメモがあります。それはそれが起こり得る一つの方法にすぎません。

いくつかのオプションがあります:

  • レジストリキーを使用して、オフにします。 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\4.0.30319.0> DWORD EnableExtensionlessUrlsから0に移動し、IISを再起動します。

  • ASP.NETパイプライン内でURLの書き換えを行います。 (明らかに、この場合は管理対象リクエストのみを書き換えることができます。)

  • ISAPIフィルターURLリライターをグローバルレベルでaspnet_filter.dllよりも高い優先度でインストールします。私には苦痛のように聞こえます。

  • ASPNETv4ではなくASPNETv2を使用するようにWebサイトを構成します。

  • eurl.axdを含むURLを完全に無視するルールをリライターに挿入します。これは簡単かもしれません
    RewriteRule eurl\.axd -

レジストリキーを使用していますが、問題なく動作します。

幸運を!

UPDATE 2011-08-10:。NETFrameworkにサービスを提供するWindowsUpdateがレジストリキーをリセットしたようで、再適用する必要があります。

編集2012-02-17この問題が発生し、コメントに埋もれていることが判明するまで、チームは数時間かけて問題を解決しました。 "Wow64(つまり、64ビットOSで実行されている32ビットワーカープロセス)の場合、このレジストリキーはHKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\ASP.NET\4.0に設定する必要があることに注意してください。 .30319.0\EnableExte‌nsionlessUrls。 "

43

私は次の正規表現をfirstルールとしてIonics Isapi RewriterASP.NET 4 onIIS 6問題を解決する 重大な変更 ASP.NET4で導入されたものによって引き起こされます:

RewriteRule ^(.*)/eurl.axd/[a-f0-9]{32}(.*)$ $1$2

これにより、拡張子のないURLを再び使用できるようになりました。

2番目のグループは、存在する場合はクエリ文字列をキャプチャし、それを書き換えられたURLに戻すことに注意してください。

そして、はい、それは バグではなく機能 です。

17
marapet

同様の問題が発生し、ISAPIRewriteモジュールプロバイダーを通じて解決策を見つけました。調査結果と解決策を文書化しました: http://www.vanadiumtech.com/OurBlog/post/2011/08/12/Cause-of-eurlaxd.aspx

1
jack