localhost:1783を使用して「IISExpress」で実行すると正常に動作するASP.NETWebAPIがあります。
しかし、「IIS Expressを使用する」を解除してから、「仮想ディレクトリの作成」を押すと...
...404エラーが発生します:
何かアイデアは何が悪いのですか?ありがとう!
localhost:1783を使用して「IISExpress」で実行すると正常に動作するASP.NETWebAPIがあります。
しかし、「IIS Expressを使用する」を解除してから、「仮想ディレクトリの作成」を押すと...
...404エラーが発生します:
何かアイデアは何が悪いのですか?ありがとう!
マークされた答えで機能しますが、実際にwebconfigに追加する必要があるのは次のとおりです。
<handlers>
<!-- Your other remove tags-->
<remove name="UrlRoutingModule-4.0"/>
<!-- Your other add tags-->
<add name="UrlRoutingModule-4.0" path="*" verb="*" type="System.Web.Routing.UrlRoutingModule" preCondition=""/>
</handlers>
追加する前に削除する必要がありますが、これらのいずれにも特定の順序はないことに注意してください。
最終的に404を取得する理由は、URLルーティングモジュールがIISのWebサイトのルートに対してのみ起動するためです。このアプリケーションの構成にモジュールを追加することで、このアプリケーションのパス(サブディレクトリパス)で実行するモジュールが作成され、ルーティングモジュールが起動します。
私にとっては、
以下の属性runAllManagedModulesForAllRequests="true"
を編集する必要がありました。"path"
以前の私のパス属性は"*."
、ドット文字を含むURLでのみ実行されることを意味していました。ただし、私のアプリケーションのURLにはドットが含まれていません。パスを切り替えた"*"
ところ、うまくいきました。これが私が今持っているものです:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule"/>
</modules>
<handlers>
<remove name="WebDAV" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
修正プログラムKB980368のインストールが必要になる場合があります。
この記事では、特定のインターネットインフォメーションサービス(IIS)7.0またはIIS 7.5ハンドラーが、URLがピリオドで終わらない要求を処理できるようにする更新について説明します。具体的には、これらのハンドラーは「。」にマップされます。リクエストパス。現在、「。」にマップされているハンドラー。リクエストパスは、URLがピリオドで終わるリクエストのみを処理します。たとえば、ハンドラーは、URLが次のURLに似ているリクエストのみを処理します。
http://www.example.com/ExampleSite/ExampleFile。
この更新を適用した後、「*」にマップされるハンドラー。リクエストパスは、URLがピリオドで終わるリクエストとURLがピリオドで終わらないリクエストを処理できます。たとえば、ハンドラーは次のURLに似たリクエストを処理できるようになりました。
http://www.example.com/ExampleSite/ExampleFile
http://www.example.com/ExampleSite/ExampleFile。
このパッチが適用されると、ASP.NET4アプリケーションは拡張子のないURLの要求を処理できるようになります。したがって、ハンドラーの実行前に実行されるマネージドHttpModuleが実行されます。場合によっては、HttpModulesが拡張子のないURLに対してエラーを返すことがあります。たとえば、.aspxリクエストのみを予期するように作成されたHttpModuleは、HttpContext.Sessionプロパティにアクセスしようとしたときにエラーを返す可能性があります。
この問題は、次の理由でも発生する可能性があります
1.Web.Configで
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
2.WebAPIがデプロイされているサーバーのbinフォルダーで以下が使用可能であることを確認します
•system.Net.Http
•System.Net.Http.Formatting
•system.Web.Http.WebHost
•system.Web.Http
Web APIパッケージは開発マシンのNugetを介してインストールされるため、公開がVisual Studioを介して行われる場合、これらのアセンブリはデフォルトでbinフォルダーにコピーされません。それでも、これらのファイルをVisual Studioの公開の一部として使用できるようにする場合は、これらのアセンブリに対してCopyLocalをTrueに設定する必要があります。
runAllManagedModulesForAllRequests = "true"には、パフォーマンスの問題とMVCルーティングの問題があると言う人もいます。彼らは以下を使用することを提案します:
http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html
http://bartwullems.blogspot.com/2012/06/optimize-performance-of-your-web.html
私にとって、この問題は他の回答とは少し異なりました。OPTIONSで404しか受信していなかったのですが、Integrated ExtensionlessURLHandlerオプションにOPTIONSが具体的に記載されていました。とても紛らわしい。
次のセキュリティノードをweb.configに追加することで、それをノックアウトする必要がありました-コンテキストに含まれる完全なsystem.webserver:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<remove name="WebDAV" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<security>
<requestFiltering>
<verbs>
<remove verb="OPTIONS" />
</verbs>
</requestFiltering>
</security>
</system.webServer>
この質問に対する完全な答えではありませんが、これはGoogleでの「IISOPTIONS 404」の最初の結果であるため、これが誰かの助けになることを願っています。今日は1時間かかりました。
Blazorと.NetCoreでこの問題が発生し、NavManagerの「baseUrl」をコントローラーへの呼び出しに組み込むと、仮想ディレクトリまたはルートWebサイトの使用に関係なく問題が解決することがわかりました。
これは私のために働いた!
string baseUrl = NavigationManager.BaseUri.ToString();
NavigationManager.NavigateTo(**baseUrl** + $"api/Download/DownloadFile?FileName="
+ sFilename, true);
Visual Studio 2012を使用していますが、Microsoftが最近リリースしたUpdate 2をダウンロードしてインストールします(2013年4月現在)。
この問題に関連するアップデートには、いくつかのバグ修正があります。
私も同じ問題を抱えていました。多くの研究開発の後、私は問題を見つけました。
しかし、構成がfinneである限り、aspnet 64ビットとIISがうまく機能しているので、私が見た唯一の問題は、パス「ローカルディレクトリパスをとるWebAPI」であるため、それを熱心に扱う必要があります。このように..〜../../../ api / products /
問題を投稿していただきありがとうございます。私は設定ファイルで多くのabtiisと他の設定を学習しました。
私はこの問題と数日間戦い、提案されたあらゆる種類のことを試みてきました。私の開発マシンは正常に動作していましたが、デプロイ先の新しいマシンで404エラーが発生していました。
IISマネージャーで、両方のマシンのハンドラーマッピングを比較して、多くのハンドラーが欠落していることを確認しました。ASP.Net5がマシンにインストールされていないことが判明しました。
私の場合、IIS Expressを使用していたアプリケーションを実行しているときに、IIS Expressを使用していない(ローカルIISを使用している)Webサイトで404エラーが発生しました。IIS Expressの実行に使用されていたブラウザを閉じると、404はなくなります。私の場合、IIS ExpressプロジェクトでローカルIISサービスを呼び出していたので、IIS ExpressプロジェクトをローカルIISを使用するように変換すると、すべてが機能しました。何らかの理由で、IIS以外のExpressWebサイトとローカルIISWebサイトの両方を同時に実行できないようです。
次のすべての設定が機能した後、丸1週間を費やしてください!そして最後に保存されました。 IISのISAPIファイラーからUrlScanを削除すると、この場合の問題が修正されます