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


96

Web APIアプリケーションがあります。VS 2010デバッグ開発サーバーを使用してテストしたところ、問題なく動作しました。しかし、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>

2
同じ問題があります。私はまだ解決策を見つけていませんが、発見したことの1つは、IISでサイトを選択し、ハンドラーマッピング機能に移動すると、静的ファイルが*存在する必要のあるファイルにマッピングされるというマッピングがあることです。このマッピングを削除してすべてのHTTP動詞の新しいマッピングを追加すると、404が取得されなくなり、空白の白いページに置き換えられます。
Despertar 2012年

>> VS 2010デバッグ開発サーバーを使用します。-別名邪悪なカッシーニ。blogs.msdn.com/b/rickandy/archive/2011/04/22/…を参照してください。それでも問題が解決しない場合は、新しいMVC 4 WebApiアプリを作成してデプロイをテストします-シンプル
RickAndMSFT

回答:


93

私もこれで苦労していました。幸いにも、Steve Michelottiは私に役立つ解決策をここに文書化しまし

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


3
その1の+1。しかし、IISマネージャーを使用して、アプリケーションのハンドラーマッピングで変更しました。たくさんの動詞のためにオンになりました。それをすべての動詞(*)と出来上がりに変更しました。しかし、常にソースに入れる方が良いです。
Wolf5

1
私は同じ問題を抱えていますが、これらの変更は私を助けませんでした。他の構成もありますか?それともライブラリ参照かもしれませんか?また、次も参照してください。stackoverflow.com
questions

2
多くの人々は、runAllManagedModulesForAllRequestsを使用するとパフォーマンスに影響を与えると述べています(下のヘムゴータムの回答を確認してください)。しかし私は、同じサービスの作品を取得、私はここの設定に従うように、することはできません。blog.maartenballiauw.be/post/2012/12/07/...そのリンクもWebDAVを有効にすると、同様の結果に影響を与える可能性があることを指摘
ホアンロング

素晴らしい答えです!
EnocNRoll-AnandaGopal Pardue 2018年

1
私にとって、動詞はすでに*でした。それでも問題が発生*するように機能させるには、パスを変更する必要*.がありました
Alsty

56

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

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

正常に動作しますが、あまり良い解決策ではありません。UrlRoutingModuleを使用することをお勧めします(以下のLopsidedによる回答を参照)。britishdeveloper.co.uk/2010/06/…– Der_Meister 2014
1

37

ASP.NETの後にIISがインストールまたは有効化されている場合、.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をクリックします。

2
開発のためにIIS Expressから完全なIISに移行しましたが、これで問題が解決しました。ありがとう!
ジムブラウン

1
上記の@JimBrownに似ています。IISエクスプレスから移行した後、私にはうまくいきました。
SolidRegardless 2015

これで解決しました。Windows 7では、新しいMVC 5 WebサイトであるVisual Studio 2015 EntがIIS Expressから完全なIISに変更されました。
Geoff Gunter 2016

26

Web APIアプリを仮想ディレクトリまたはアプリケーションで実行していますか?

たとえば、[Default Web Site]> [SampleWebAPI]でプロジェクトをローカルIISに移動したときにも同じ問題が発生しました。これは、URLルーティングが次のようにられます。

オリジナル: localhost:3092/api/values
移動: localhost/SampleWebAPI/api/values

Web APIプロジェクトを別のポートで実行されている独自のWebサイトに移動すると、動作するようです。

追記:私はapiウェブサイト内のアプリケーションのエイリアスとして追加することで問題をさらに複雑にしましたURL

localhost:81/api/api/values -ウェブサイトを自分のウェブサイトに移動した後にこれに気づいた

私は私のウェブサイトやウェブAPI MVCプロジェクトのサイト間の分離を維持したかったので、そのため、私はでルーティングルールを変更global.asaxからウェブAPI「DefaultAPI」のためapi/{controller}/{id}{controller}/{id}とASP.NET MVCの1 Defaultから{controller}/{id}info/{controller}/{id}


3
ふふふ...私は中に私のアプリを命名していたIISとしてapi、あまりにも。これにより、このすべての試行錯誤によるデバッグが2時間以上発生しました。あなたの経験を共有してくれてありがとう!名前を変更すると、再びビジネスに戻ります。:D
レニエルマッカフェリ2013

ありがとう-これは私の問題でした!:)
Jen

ポート8080でプロジェクトをホストしたときにAPI呼び出しが失敗した理由がわかりません。デフォルトのWebサイトの下の仮想ディレクトリとして移動するだけでうまくいきました:)
Kiran

14

これが私にとってうまくいった唯一の答えです...

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


以下を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タグはすでに存在していましたが、それにモジュールタグを追加してから、モジュールタグにタグを削除および追加しました


この問題は2008(R2ではない)サーバーで発生しました。これが私にとって有効な唯一のソリューションでした。また、これをアプリプールを「統合」モードに設定することと組み合わせる必要がありました。
Zoomzoom 2016

11

チェックするいくつかの事柄:

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

同じIISサーバーで他の4つの通常のWebアプリケーションを実行していて、それらはすべて.netフレームワーク4を使用しているので、これらの4つのポイントのうちどれが不要ですか?mvcアプリケーションを公開したときに、展開可能な依存関係を追加し、ASP.NET MVCを追加して、binディレクトリに配置しました
Armand

@Armand#1をやったようですね。#2はまだ必要です。デプロイ可能な依存関係を追加する場合は、ここで説明するようにしてください:haacked.com/archive/2011/05/25/bin-deploying-asp-net-mvc-3.aspxは、上記の#3を処理する必要があります。#4は必要かどうかはわかりませんが、必要な場合と必要でない場合を伝える知識はありません。
Joe Schrag

9

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

スクリーンショット


7

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

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

サディッシュ・クマール.V


サーバーにMVCがインストールされていない場合は、これらのDLLが必要です。私の場合、APIを呼び出そうとしたときに空白のページが表示されました。DLLの追加は手動で機能しました。ありがとう!!
Vipul bhojwani 16

System.Net.Httpをメインの発行フォルダーに追加した後、私の問題は解決しました。私のものはAsp.net Coreソリューション
でした

6

これに基づきSOの答えは、私は変更しなければならなかったpath="*."path="*"追加のためExtensionlessUrlHandler-Integrated-4.0configuration>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" />

グレッグ、どうもありがとうございました。この愚かなpath = "*"のせいで私は私を殺そうとしていました。しかし、今、この悲惨なドットを落とした後、すべてが完璧に機能します!どうもありがとうございました!
Junior Silva

5

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


1
私自身もこれを発見しました。それは見逃しやすいのであなたの答えを賛成しています。アプリのサイトを作成すると、IISが自動的にアプリプールを作成し、.NET v2.0に設定しました。なぜ、なぜ、なぜ?? :)
Mike Taverne

3

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


そして、あなたはそれをどこでしますか?
vapcguy

1
プロジェクトを右クリックして[公開]を選択すると表示されるダイアログにあります。それはこの
Pakman

3

マイクロソフトからの公式修正があります:http : //support.microsoft.com/kb/980368

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


1
ありがとうので、ずっと!私は他のすべてを絶対に試しました、そしてそれがそれを修正した唯一のものでした。
Oran Dennison 2017年

こちらも同じです。この回答を追加していただき、ありがとうございます。私の問題の解決策でした!
Octavio Garbarino 2017年

2

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

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


これでうまくいきました。AzureアプリケーションをVMデプロイメントに戻し、WebRole.csのコンテンツをコメントアウトした後、WebAPI呼び出しが再び機能し始めました。
スコット

これで一日過ごしたに違いない!WebRole.csのコメントは機能しましたが、なぜ不思議
イゴレク

2

アプリケーションプールが統合モードになっていることを確認し、
web.configファイルに以下を追加します。

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

2

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

myserver.myintranet.com/mysite

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

入れたら myserver.myintranet.com、ホスト名に404が消えていました。

IISマネージャーで、操作ウィンドウの[ バインディング]に移動し、httpバインディングを編集してホスト名を指定します。


私も同じ問題に直面しています。そして、あなたが提案したように、私はhttpバインディングでホスト名をチェックしました、そしてそれは正しく更新されました しかし、それでも私の問題は解決しません。注:APIアプリケーションを子アプリケーションとしてホストしました。誰かがこれについて考えているかどうか提案してください。例:「sample.example.com」が私のメインアプリケーションであり、このドメインの下に「sample.example.com/myAPI/」としてAPIを作成
Krishna Mani


1

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


1

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

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


1

私もこれで苦労しました。私の正確な問題は、パラメーターをWebメソッドに入力してテストしたときに404が得られるASMX Webサービスがあったことです。特定のメソッドは以前は正常に動作し、変更されていませんでした。再公開のみ。それから私はここに着いて、投稿されたすべての答えを試しましたが何の助けもありませんでした。

私の究極の解決策は?これは抜本的ですが、新しいVisual StudioソリューションとWebプロジェクトを作成しました。MVCを選択してから、[追加]> [新しいアイテム]を選択し、その下で[Visual C#]> [Web]および[Webサービス(ASMX)]を選択しました。私はすべての古い分離コードをコピーしてから、新しいプロジェクトで新しいファイルに与えられた名前空間に注意し、古いプロジェクトのすべてを新しいプロジェクトの新しい分離ファイルに貼り付けて、名前空間を配置しました元の状態に戻ります。

次に、Visual Studioを使用して[追加]> [新しいフォルダー]を実行する前に使用していたプロジェクトにフォルダーを作成し、Windowsエクスプローラーを使用して他のプロジェクトのフォルダーにファイルをコピーし、次に各フォルダーを右クリックしました。 Visual Studioで「追加」>「既存のアイテム...」を実行し、それらのフォルダー内のアイテムを新しいプロジェクトのVisual Studioフォルダーにプルしました。私はすべての.NETアセンブリを再度参照し、両方のプロジェクトを開いて、以前に参照したものを比較できるようにしました(いくつかありました)。新しいプロジェクトに少し異なる名前を付ける必要がありました。たとえば、基本的には「MyWebApp」の代わりに「GeneralWebApp」に相当するものを実行しました。つまり、ソリューション全体で「すべて置換」を実行して、その名前を置き換える必要がありました。

次に、プロジェクトで「すべて再ビルド」を実行し、正しくビルドできるようになったときにVisual Studioが表示する「再生」ボタンでプロジェクトを起動しました。それはうまくいきました。だから私はそれを公開しました、そしてそれを私がそこから実行したとき、私がそれを公開したサーバーですべてがうまくいきました。何が起こったのか私には説明がありませんが、それが私がそれを乗り越えた方法です。Visual Studioが実行していることが原因であるかどうかを確認するだけでも、悪いテストではありません。


1

IISにbinフォルダーのみを配置すると(プロジェクトのビルド後)、この問題も発生します。この状況では、VisualStudioを使用てプロジェクトを公開し、公開したフォルダーをIISに配置する必要があります。


0

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

これは少し左側の回答ですが、APIが実際に何を返しているかを確認するために、404のIISデフォルトエラーページを削除してみましたか?

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

別の問題ですが、それが役立つ可能性があることは決してわかりません;)


0

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

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

このSOの投稿は私がそれを解決するのに役立ちます。


0

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

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


0

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

IISをアンインストールし(Windowsの機能の追加/削除から)、再インストールして、aspnet_regiis -iを実行しました。多分これは誰かを助ける。


0

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


0

私は何もせず、このタグをweb.configに追加するだけで、この問題が機能し、この問題は次のいずれかのポイントになります

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

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

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

このタグをweb.configで使用するだけで機能します。

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

0

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


0

私にとっての解決策は、私のweb.configファイルから次の行を削除することでした。

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.1.1.3" newVersion="4.1.1.3" />
</dependentAssembly>
<dependentAssembly>
    <assemblyIdentity name="Microsoft.IdentityModel.Tokens" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
</dependentAssembly>

VSがそれらを自動的に追加したことに気付きましたが、その理由はわかりません


0

このwebconfgを試してください。「NewsApi.dll」をメインdllに置き換えてください。


<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\NewsApi.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
    </system.webServer>
  </location>
</configuration>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.