Web Apiアプリケーションがあります。 VS 2010デバッグdevサーバーを使用してテストした場合、完全に機能します。しかし、今ではIIS 7.5にデプロイしており、アプリケーションにアクセスしようとするとHTTP 404エラーが発生します。
ここに私のweb.configがあります
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnet-FlowGearProxy-20123141219;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
<appSettings>
<add key="webpages:Version" value="2.0.0.0" />
<add key="webpages:Enabled" value="true" />
<add key="PreserveLoginUrl" value="true" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
<pages>
<namespaces>
<add namespace="System.Web.Helpers" />
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.WebPages" />
</namespaces>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
</configuration>
私もこれに苦労していました。幸いなことに、スティーブ・ミケロッティは私のために働いた解決策を文書化した ここ 。
1日の終わりに、Web構成でExtensionlessUrlHandler-Integrated-4.0ハンドラーに対してすべての動詞(verb = "*")を有効にしました。
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true" />
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
他の人は、WebDAVを有効にすると問題が発生することを指摘しています。幸いなことに、私もその問題に遭遇しませんでした。
同じ問題があった。この構成設定は問題を解決しました。
<system.webServer>
.....
<modules runAllManagedModulesForAllRequests="true" />
.....
</system.webServer>
http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html で説明したように、上記の解決策は避けてください。代わりにこれを使用してください。 Lopsidedも同じソリューションを提供しています。ユーザーが最初の実用的なソリューションを実装しないように、ここに保持します。
<modules>
<remove name="UrlRoutingModule-4.0" />
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
<!-- any other modules you want to run in MVC e.g. FormsAuthentication, Roles etc. -->
</modules>
IISがASP.NETの後にインストールまたは有効になっている場合、.NETアプリケーションを機能させるには、ASP.NETをIISに手動で登録する必要があります。
Windows 7以前の場合:
Windows 8以降の場合:
Web APIアプリを仮想ディレクトリまたはアプリケーションで実行していますか?
たとえば、プロジェクトを[既定のWebサイト]> [SampleWebAPI]のローカルIISに移動したときに同じ問題が発生しました。これは、次のようにURL
ルーティングが変更されたためだと思います。
オリジナル:localhost:3092/api/values
移動:localhost/SampleWebAPI/api/values
Web APIプロジェクトを別のポートで実行されている独自のWebサイトに移動すると、動作するようです。
追加のメモ:私のWebサイト内のアプリケーションのエイリアスとしてapi
を追加することで、問題をさらに複雑にしました。これにより、有効なURL
は次のようになりました。
localhost:81/api/api/values
-Webサイトを独自のWebサイトに移動した後にこれに気づいた
したがって、WebサイトとWeb API MVCプロジェクトサイトを分離したいので、Web API "DefaultAPI"のglobal.asax
のルーティングルールをapi/{controller}/{id}
から{controller}/{id}
に変更し、ASP.NET MVC one Default
を{controller}/{id}
からinfo/{controller}/{id}
に変更しました。
これは私のために働いた唯一の答えです...
私は同様の問題を抱えていました...何をしたとしても、何もリダイレクトされず、私のグローバルファイルはただ無視されているように見えました。この答えを見つける前に、すべてを終わらせることを真剣に考えました。このリンクが他の人の役に立つことを願っています。
Web.configファイルに次を追加するとうまくいきました。
<system.webServer>
<modules>
<remove name="UrlRoutingModule-4.0" />
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
</modules>
</system.webServer>
system.webServerタグはもちろんありましたが、modulesを追加しましたそれにタグ付けしてから、remove&addタグをモジュールタグに追加します。
確認するいくつかの事項:
同様の問題がありました。 web.configファイルに適切な設定がありましたが、アプリケーションプールを統合モードではなくクラシックモードで実行していました
この問題は、次の原因でも発生する可能性があります
1. Web.Configで
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<system.webServer>
2. Web APIがデプロイされているサーバーの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に設定する必要があります。
サディッシュ・クマール
私もこの問題に遭遇しました。 [アプリケーションプール]> [アプリケーションプール名]に移動して問題を解決し、.NET Frameworkをバージョンv.2.0.50727からv4.0.30319に変更しました。
これに基づいて SOの答え 、私はpath="*."
のpath="*"
に追加されたExtensionlessUrlHandler-Integrated-4.0
のconfiguration>system.WebServer>handlers
をweb.config
に変更する必要がありました
前:
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
後:
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
Microsoftからの公式修正があります。 http://support.Microsoft.com/kb/980368
<モジュールrunAllManagedModulesForAllRequests = "true">を使用することは強くお勧めしません。これにより、すべてのリクエスト(.jpg、.css、.pdfなど)が登録されたすべてのHTTPモジュールによって処理されます。 2つのマイナスの瞬間があります。a)ハードウェアリソースへの追加の負荷。 b)HTTPモジュールが新しいタイプのコンテンツを処理するため、潜在的なエラー。
アプリケーションプールが統合モードにあることを確認してください
そして、次をweb.configファイルに追加します。
<system.webServer>
.....
<modules runAllManagedModulesForAllRequests="true" />
.....
</system.webServer>
ファイル発行オプション「発行中のプリコンパイル」を無効にする必要がありました。
プロジェクトにファイル「WebRole.cs」を追加するように指示されたWindows Azureチュートリアルに従って、Web APIから404応答を取得し始めました。
プロジェクトから「WebRole.cs」を削除した後、Web API呼び出しが再び機能し始めました。
私の場合、問題は単に私がサイトにアクセスしようとしていたことでした
myserver.myintranet.com/mysite
ただし、IISのhttpのWebサイトバインディングには、バインディングでホスト名が指定されていません。以前はうまく機能していたので、どうやって吹き飛ばされたのかわかりません。
ホスト名にmyserver.myintranet.com
を入れると、404はなくなりました。
IIS Managerで、アクションペインのBindings ...に移動し、httpバインディングを編集してホスト名を指定します。
私もこれに苦労しました。私の正確な問題は、Webメソッドにパラメーターを入力してテストすると、404が得られるASMX Webサービスがあったことです。特定のメソッドは過去に正常に機能し、変更されていませんでした。再公開のみ。それから私はここに来て、投稿された答えをすべて試しましたが、何も助けませんでした。
私の究極の解決策は?これは抜本的ですが、新しいVisual StudioソリューションとWebプロジェクトを作成しました。 MVCを選択し、[追加]> [新しいアイテム]を選択し、その下で[Visual C#]> [Web]および[Webサービス(ASMX)]を選択しました。古いコードビハインドコードをすべてコピーし、新しいプロジェクトの新しいファイルに与えられた名前空間に注意して、古いプロジェクトのすべてを新しいプロジェクトの新しいコードビハインドファイルに貼り付け、名前空間を配置しました。元の状態に戻ります。
次に、Visual Studioを使用して「追加」>「新規フォルダー」を実行する前に持っていたプロジェクトにフォルダーを作成し、Windowsエクスプローラーを使用して他のプロジェクトからフォルダーにファイルをコピーし、各フォルダーを右クリックしましたVisual Studioで[追加]> [既存のアイテム...]を実行し、それらのフォルダー内のアイテムを新しいプロジェクトのVisual Studioフォルダーにプルしました。すべての.NETアセンブリを再度参照し、両方のプロジェクトを開いて、以前に参照したものを比較できるようにしました(複数ありました)。新しいプロジェクトの名前を少し変えなければなりませんでした-基本的には、たとえば「MyWebApp」ではなく「GeneralWebApp」に相当することをしました。そのため、ソリューション全体で「Replace All」を実行してその名前を置き換えました。すべてのファイルに適切な名前空間を取得します。
次に、プロジェクトで「すべてリビルド」を実行し、Visual Studioが正しくビルドできるようになったときに「再生」ボタンを使用して起動しました。うまくいきました。だから私はそれを公開し、そこからそれを実行したとき、私はそれを公開したサーバーですべてがうまくいった。私は何が起こったのかについての説明はありませんが、それは私がそれを乗り越えた方法です。 Visual Studioが実行していることで問題が発生したかどうかを確認するだけでは、悪いテストではありません。
Global.asaxをデプロイすることを忘れないでください
同じ問題、IISから提供されたWeb APIコントローラーに対する404応答がありましたが、VS2010からはすべて正常に機能していました。上記のソリューションはどれもうまくいきませんでした。最終的には、アプリケーションにWSE 3.0のサポートを追加し、Microsoft.Web.Services3 dllがアプリケーションの/ binディレクトリにないことが問題であることがわかりました。奇妙なことですが、dllをコピーした後、ルートマッピングが機能し始めました。
私にとって問題は、ルートサイトが.NET 2.0アプリプールを使用するように構成されていて、そのサイト内のアプリケーションが.NET 4.5だったことです。
.NET 4アプリプールを使用して新しいサイトを作成し、そのルートにアプリケーションを配置しました。
Web.configファイルのこの設定は、私にとって助けになりました:system.webServerセクションで:
<security>
<requestFiltering>
<verbs applyToWebDAV="true">
<remove verb="PUT" />
<add verb="PUT" allowed="true" />
<remove verb="DELETE" />
<add verb="DELETE" allowed="true" />
<remove verb="PATCH" />
<add verb="PATCH" allowed="true" />
</verbs>
</requestFiltering>
</security>
UrlRoutingModule-4.0のチェックボックスを有効にすると、解決しました。
[IISマネージャー]> [モジュール]> [UrlRoutingModule-4.0]> [モジュールの編集]を選択し、[ASP.NETアプリケーションまたはマネージハンドラーへの要求に対してのみ呼び出す]チェックボックスをオンにします。
どのようなHTTPリクエストを作成していますか?
これは少し左のフィールドの答えですが、APIが実際に返しているものを確認するために、404のIISデフォルトエラーページを削除しようとしましたか?
間違ったIDをPOSTしたときに、コントローラーメソッドが404を返すようにしたいという問題がありました。 APIからのHTTP応答ではなく、常にIIS 404「ファイルまたはディレクトリが見つかりません」ページを取得していることがわかりました。デフォルトの404エラーページを削除することで問題は解決しました。
別の問題ですが、あなたはそれが役立つかもしれないことを決して知らない;)
Web APIと.Net Core Web APIで同じ問題に遭遇しました。デバッグ中にVS 2017で正常に機能しましたが、IIS 7.5に公開されたときに404を返しました。私にとっての解決策は、サイトの作成方法を変更することでした。 Webサイトのルート([サイト] ... [Webサイトの追加]を右クリックして作成)に公開する代わりに、アプリケーション([Webサイト] ... [アプリケーションの追加]を右クリックして作成)を作成してそのフォルダーに公開する必要がありました。コアバージョンでは、アプリケーションプールの.NET Frameworkバージョン設定を「マネージコードなし」に変更する必要がありました。
私は同じ問題を抱えていました:Visual Studio 2013を使用して新しくインストールされたマシンでは、Web APIプロジェクトはIISExpressで動作していましたが、ローカルIISでは動作していませんでした。見つけたものはすべて試しましたが、最終的にはWeb APIでは問題は不要でしたが、MVCではインストールされていても、MVCプロジェクトは実行されていませんでした。
私のために働いたのは、IIS(Windows機能の追加/削除から)をアンインストールしてから再インストールし、aspnet_regiis -iを実行することでした。たぶん、これは他の誰かを助けるでしょう。
Sites/Default Web Sitesではなく、別のポートにバインドされた別のWebサイトに自分のWebアプリを追加していることに気づくために、私は多くのことに多くの時間を費やしました。明らかに、ポート80でlocalhostを試すと404になります。
最近、すべてのWeb Api 2ルート/コントローラーで404 not foundエラーが発生しました。そこで、実際のサーバーにアクセスして、ホスト名の代わりにlocalhostを使用して参照しようとすると、「404.7 Not Found-要求フィルターモジュールはファイル拡張子を拒否するように構成されています」と表示されました。
私は何もしません、web.configにこのタグを追加するだけで、この問題は次の点の1つになります
MVCまたはasp.netフォームを使用して同じプロジェクトでWeb Apiを使用する
Global.asaxのRouteConfigとWebApiConfigをGlobalConfiguration.Configure(WebApiConfig.Register)として使用します。 RouteConfig.RegisterRoutes(RouteTable.Routes);
RouteConfigを2つの目的に使用します。asp.netフォームは、FriendlyurlとMVCルーティング用のmvcルーティングを使用します。
web.configでこのタグを使用するだけで、動作します。
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
.........................
</modules>
</system.webServer>