次の手順を使用します。
(私はチェックしました この同様の投稿 、それは私の問題を解決しません。)
次のコードで「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/
が成功するという奇妙な問題として現れました。楽しんで! (末尾のスラッシュに注意してください。)
これは、拡張子のないURLをデフォルトでASP.NETv4で処理できるようにするMicrosoftのアプローチの一部ですIIS 6.ここでは ASPNET V4の重大な変更 ドキュメント。(そのドキュメントでeurl.axdを検索します)。これはASPNETv4でのみ発生します。
何が起こるか:
aspnet_filter.dll
、ASPNETを実装するグローバルISAPIフィルター([Webサイト]フォルダーを右クリック> [プロパティ]をクリックして表示)は、各受信URLを検査します。拡張子のないURLの場合、ASPNETはURLをマングルして、/eurl.axd/some-long-number
を挿入します。実際、長い数字はダッシュのないGUIDです。
次に、サイト固有のISAPIフィルターであるURLリライターが実行され、マングルされたURLが表示されます。ルールは、その奇数シーケンスが挿入されたURLを想定していないため、書き換えフィルターはそれを適切に処理せず、ユーザーはおそらく404になります。
これは、IIS6およびASPNET v4とともにインストールされた場合、任意の書き換えフィルター(Helicon ISAPI_Rewrite、IIRFなど)で発生します。また、他のISAPIフィルター(明示的にリライターではないフィルター)でも発生する可能性があります。
Microsoftが意図したこと:
aspnet_filter.dll
ISAPIfilterは、拡張子のないURLに/eurl.axd/some-long-numberを追加します。 (URLに拡張子が含まれている場合は、そのままにして、マネージコードにヒットすることによるパフォーマンスへの影響を防ぎます。)これは、「。axd」をそこに取得するだけなので、IIS6はデフォルト構成でaspnet_isapi.dll
ISAPIextension(アプリケーション)。
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\EnableExtensionlessUrls。 "
同様の問題が発生し、ISAPIRewriteモジュールプロバイダーを通じて解決策を見つけました。調査結果と解決策を文書化しました: http://www.vanadiumtech.com/OurBlog/post/2011/08/12/Cause-of-eurlaxd.aspx