web-dev-qa-db-ja.com

ASP.NET Web APIアプリケーションは、IIS 7にデプロイされると404を返します

Localhost:1783で「IIS Express」で実行すると正常に動作するASP.NET Web APIがあります

Settings in VS

しかし、「Use IIS Express」を外し、「Create Virtual Directory」を押すと...

New settings

... 404エラーが表示されるだけです。 The 404 error

何かアイデアは間違っていますか?ありがとう!

52
Cotten

マークされた答えで機能しますが、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サイトのルートに対してのみ作動するためです。このアプリケーションの構成にモジュールを追加することにより、このアプリケーションのパス(サブディレクトリパス)の下でモジュールを実行し、ルーティングモジュールが起動します。

39
DavidAndroidDev

私にとっては、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>
14

Hotfix 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.NET 4アプリケーションは、拡張子のないURLのリクエストを処理できます。したがって、ハンドラーの実行前に実行されるマネージHttpModulesが実行されます。場合によっては、HttpModulesは拡張子のないURLに対してエラーを返すことがあります。たとえば、.aspx要求のみを想定して記述されたHttpModuleは、HttpContext.Sessionプロパティにアクセスしようとするとエラーを返す場合があります。

10
Tony

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

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

8
Sadish Kumar V

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

2
Jeff

私にとって、この問題は、OPTIONSで404のみを受け取っていたため、他の回答とはわずかに異なりましたが、統合エクステンションレスURLハンドラーオプションでOPTIONSがすでに明確に述べられていました。非常に紛らわしいです。

  1. 他の人が述べているように、モジュールノードのrunAllManagedModulesForAllRequests = "true"は、ほとんどのWeb API 404問題を簡単に解決する方法です。しかし、私の場合はさらに何かがありました。
  2. 残念ながら、サイトのRequest Filteringの下のIISにこのセットがありました。

OPTIONS Issue with Request Filtering

次のsecurity nodeを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での「IIS OPTIONS 404」の最初の結果です。今日は1時間かかりました。

0

私にとって、IIS Expressを使用していたアプリケーションを実行中に、(ローカルIISを使用して)IIS Expressを使用していないWebサイトで404エラーを受け取りました。 IIS Expressの実行に使用されていたブラウザーを閉じると、404は消えます。私にとっては、IIS ExpressプロジェクトがLocal IISサービスを呼び出していたので、IIS ExpressプロジェクトをLocal IISを使用するように変換しました。その後、すべてが機能しました。何らかの理由で、IIS以外のExpress WebサイトとローカルIIS Webサイトの両方を同時に実行することはできないようです。

0
deadlydog

私は、提案されたすべての種類のことを試して、この問題と数日間戦いました。開発用マシンは正常に機能していましたが、デプロイしようとしていた新しいマシンから404エラーが発生していました。

IIS managerで、両方のマシンのハンドラーマッピングを比較して、多くのハンドラーが欠落していることを認識しました。 ASP.Net 5がマシンにインストールされていなかったことがわかります。

0
yannb

Visual Studio 2012を使用している場合、Microsoftが最近リリースした(2013年4月現在)Update 2をダウンロードしてインストールします。

Visual Studio 2012 Update 2

このアップデートには、問題に関連するいくつかのバグ修正があります。

0
mitaka

私も同じ問題を抱えていた。多くの研究開発の後、私は問題を見つけました。

しかし、設定がfinnetである限り、aspnet 64ビットとIISを意味するので、私が見た唯一の問題は、「web apiがローカルディレクトリパスを取得する」パスであるため、それを提供する必要があります。このようにして.. 〜../../../ api/products /

問題を投稿していただきありがとうございます。私は設定ファイルの多くのiisと他の設定を学習しました。

0
SRIRAM