web-dev-qa-db-ja.com

IIS 7.5でホストされているWeb ApiでHTTP 404ページが見つかりません

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>
91
Armand

私もこれに苦労していました。幸いなことに、スティーブ・ミケロッティは私のために働いた解決策を文書化した ここ

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を有効にすると問題が発生することを指摘しています。幸いなことに、私もその問題に遭遇しませんでした。

86
Kevin Ortman

同じ問題があった。この構成設定は問題を解決しました。

<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>
53
hemant gautam

IISがASP.NETの後にインストールまたは有効になっている場合、.NETアプリケーションを機能させるには、ASP.NETをIISに手動で登録する必要があります。

Windows 7以前の場合:

  1. 管理者としてコマンドプロンプト(cmd.exe)を実行します。
  2. 適切な.NET Frameworkの場所に移動します。 (例:C:\ Windows\Microsoft.NET\Framework64\v4.0.30319)
  3. Aspnet_regiis.exe -iを実行します

Windows 8以降の場合:

  1. [スタート]メニューから「Windows機能の有効化または無効化」と入力し、最初の結果を選択します。
  2. [インターネットインフォメーションサービス:World Wide Webサービス:アプリケーション開発機能]を展開し、ASP.NET 4.5(または.NET Framework 2.0-3.5でプロジェクトをサポートする必要がある場合はASP.NET 3.5)を選択します。
  3. OKをクリックします。
33
Brandon Gano

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}に変更しました。

25
Nicholas Barger

これは私のために働いた唯一の答えです...

私は同様の問題を抱えていました...何をしたとしても、何もリダイレクトされず、私のグローバルファイルはただ無視されているように見えました。この答えを見つける前に、すべてを終わらせることを真剣に考えました。このリンクが他の人の役に立つことを願っています。


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を追加しましたそれにタグ付けしてから、removeaddタグをモジュールタグに追加します。

14
Lopsided

確認するいくつかの事項:

  1. .NET Framework 4がインストールされていることを確認してください。
  2. Webサイトおよび仮想ディレクトリに.NET Frameworkのバージョン4が選択されていることを確認してください(該当する場合)。
  3. MVCがインストールされているか、binディレクトリに適切なDLLがあることを確認してください。
  4. ASP.NET 4.0 Webサービス拡張を許可する必要がある場合があります
  5. アプリケーションを独自のアプリプールに配置します。
  6. ディレクトリに少なくとも「スクリプトのみ」の実行権限があることを確認してください。
11
Joe Schrag

同様の問題がありました。 web.configファイルに適切な設定がありましたが、アプリケーションプールを統合モードではなくクラシックモードで実行していました

screen shot

9
Rob Sedgwick

この問題は、次の原因でも発生する可能性があります

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に設定する必要があります。

サディッシュ・クマール

6
Sadish Kumar V

私もこの問題に遭遇しました。 [アプリケーションプール]> [アプリケーションプール名]に移動して問題を解決し、.NET Frameworkをバージョンv.2.0.50727からv4.0.30319に変更しました。

5
coson

これに基づいて SOの答え 、私はpath="*."path="*"に追加されたExtensionlessUrlHandler-Integrated-4.0configuration>system.WebServer>handlersweb.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" />
4
Greg

Microsoftからの公式修正があります。 http://support.Microsoft.com/kb/980368

<モジュールrunAllManagedModulesForAllRequests = "true">を使用することは強くお勧めしません。これにより、すべてのリクエスト(.jpg、.css、.pdfなど)が登録されたすべてのHTTPモジュールによって処理されます。 2つのマイナスの瞬間があります。a)ハードウェアリソースへの追加の負荷。 b)HTTPモジュールが新しいタイプのコンテンツを処理するため、潜在的なエラー。

3
Roman O

アプリケーションプールが統合モードにあることを確認してください
そして、次をweb.configファイルに追加します。

<system.webServer>
    .....
    <modules runAllManagedModulesForAllRequests="true" />
    .....
</system.webServer>
2
Rakesh

ファイル発行オプション「発行中のプリコンパイル」を無効にする必要がありました。

2
Pakman

プロジェクトにファイル「WebRole.cs」を追加するように指示されたWindows Azureチュートリアルに従って、Web APIから404応答を取得し始めました。

プロジェクトから「WebRole.cs」を削除した後、Web API呼び出しが再び機能し始めました。

2
Josh Mouch

私の場合、問題は単に私がサイトにアクセスしようとしていたことでした

myserver.myintranet.com/mysite

ただし、IISのhttpのWebサイトバインディングには、バインディングでホスト名が指定されていません。以前はうまく機能していたので、どうやって吹き飛ばされたのかわかりません。

ホスト名にmyserver.myintranet.comを入れると、404はなくなりました。

IIS Managerで、アクションペインのBindings ...に移動し、httpバインディングを編集してホスト名を指定します。

2
toddmo

私もこれに苦労しました。私の正確な問題は、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が実行していることで問題が発生したかどうかを確認するだけでは、悪いテストではありません。

1
vapcguy

Global.asaxをデプロイすることを忘れないでください

1
Adem Aygun

同じ問題、IISから提供されたWeb APIコントローラーに対する404応答がありましたが、VS2010からはすべて正常に機能していました。上記のソリューションはどれもうまくいきませんでした。最終的には、アプリケーションにWSE 3.0のサポートを追加し、Microsoft.Web.Services3 dllがアプリケーションの/ binディレクトリにないことが問題であることがわかりました。奇妙なことですが、dllをコピーした後、ルートマッピングが機能し始めました。

1
devilcius

私にとって問題は、ルートサイトが.NET 2.0アプリプールを使用するように構成されていて、そのサイト内のアプリケーションが.NET 4.5だったことです。

.NET 4アプリプールを使用して新しいサイトを作成し、そのルートにアプリケーションを配置しました。

1
JuniorEbuka

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>      
0

UrlRoutingModule-4.0のチェックボックスを有効にすると、解決しました。

[IISマネージャー]> [モジュール]> [UrlRoutingModule-4.0]> [モジュールの編集]を選択し、[ASP.NETアプリケーションまたはマネージハンドラーへの要求に対してのみ呼び出す]チェックボックスをオンにします。

0
Anilkumar Y

どのようなHTTPリクエストを作成していますか?

これは少し左のフィールドの答えですが、APIが実際に返しているものを確認するために、404のIISデフォルトエラーページを削除しようとしましたか?

間違ったIDをPOSTしたときに、コントローラーメソッドが404を返すようにしたいという問題がありました。 APIからのHTTP応答ではなく、常にIIS 404「ファイルまたはディレクトリが見つかりません」ページを取得していることがわかりました。デフォルトの404エラーページを削除することで問題は解決しました。

別の問題ですが、あなたはそれが役立つかもしれないことを決して知らない;)

0
Oliver Picton

Web APIと.Net Core Web APIで同じ問題に遭遇しました。デバッグ中にVS 2017で正常に機能しましたが、IIS 7.5に公開されたときに404を返しました。私にとっての解決策は、サイトの作成方法を変更することでした。 Webサイトのルート([サイト] ... [Webサイトの追加]を右クリックして作成)に公開する代わりに、アプリケーション([Webサイト] ... [アプリケーションの追加]を右クリックして作成)を作成してそのフォルダーに公開する必要がありました。コアバージョンでは、アプリケーションプールの.NET Frameworkバージョン設定を「マネージコードなし」に変更する必要がありました。

0
miked

私は同じ問題を抱えていました:Visual Studio 2013を使用して新しくインストールされたマシンでは、Web APIプロジェクトはIISExpressで動作していましたが、ローカルIISでは動作していませんでした。見つけたものはすべて試しましたが、最終的にはWeb APIでは問題は不要でしたが、MVCではインストールされていても、MVCプロジェクトは実行されていませんでした。

私のために働いたのは、IIS(Windows機能の追加/削除から)をアンインストールしてから再インストールし、aspnet_regiis -iを実行することでした。たぶん、これは他の誰かを助けるでしょう。

0

Sites/Default Web Sitesではなく、別のポートにバインドされた別のWebサイトに自分のWebアプリを追加していることに気づくために、私は多くのことに多くの時間を費やしました。明らかに、ポート80でlocalhostを試すと404になります。

0
guiomie

最近、すべてのWeb Api 2ルート/コントローラーで404 not foundエラーが発生しました。そこで、実際のサーバーにアクセスして、ホスト名の代わりにlocalhostを使用して参照しようとすると、「404.7 Not Found-要求フィルターモジュールはファイル拡張子を拒否するように構成されています」と表示されました。

このSO投稿は解決に役立ちます。

0
santos

私は何もしません、web.configにこのタグを追加するだけで、この問題は次の点の1つになります

  1. MVCまたはasp.netフォームを使用して同じプロジェクトでWeb Apiを使用する

  2. Global.asaxのRouteConfigとWebApiConfigをGlobalConfiguration.Configure(WebApiConfig.Register)として使用します。 RouteConfig.RegisterRoutes(RouteTable.Routes);

  3. RouteConfigを2つの目的に使用します。asp.netフォームは、FriendlyurlとMVCルーティング用のmvcルーティングを使用します。

web.configでこのタグを使用するだけで、動作します。

<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
   .........................
</modules>
</system.webServer>
0
adnan