1

MVCプロジェクトと別のWebApiプロジェクトを使用したソリューションがあります。私はMVC部分に取り組んでおり、クラウドサービスプロジェクトでWebロールとしてホストされています。

次に、WebApi上に構築する必要があります。Azureエミュレーターでソリューションをそのまま実行すると、Web Apiコントローラーにアクセスできず、404NotFoundが表示されます。

ソリューションでWebApiプロジェクトを作成した後、MVCプロジェクトを(MVCプロジェクトからの)jQuery ajax呼び出しを使用してApiコントローラーにヒットできるようにするには、どのような手順を実行する必要がありますか?

注:Apiを消費するアプリケーションの部分は、サブドメインにあります(例:「sumptionapp.myapplication.com/api/Values」。それが違いを生むかどうかはわかりません。

4

1 に答える 1

0

これが、単一のWebロールの下でAzureでMVCとWebApiを並べて実行する手順です。

  1. クラウドサービスプロジェクトのWebロールとしてMVCプロジェクトのみを追加します。
  2. ServiceDefinition.csdefを開き、次のように構成します。

    <Sites>
       <Site name="Web" physicalDirectory="..\..\..\Application.Web">
          <Bindings>
             <Binding name="Endpoint1" endpointName="Endpoint1" />
          </Bindings>
       </Site>
       <Site name="Web.Api" physicalDirectory="..\..\..\Application.Web.Api">
          <Bindings>
             <Binding name="Endpoint1" endpointName="Endpoint1" hostHeader="api.myapplication.com"/>
          </Bindings>
       </Site>      
    </Sites>
    

    注: 物理ディレクトリは、CloudProject \ bin \ releaseにデプロイされている定義ファイルを基準にしているため、ソリューションフォルダーに到達するには3つのノードをバックトラックする必要があります。また、プロジェクトを実行しようとすると、physicalDirectoryが自動的に不正なパスに戻されるという問題が発生しました。これを修正するには、クラウドプロジェクト>プロジェクトの依存関係>を右クリックし、両方のプロジェクトがオフになっていることを確認します。また、定義ファイルのテキストエディタのすべてのインスタンスを保存して閉じてから、再構築して最後に実行してください。ある種のバグが私を狂わせ、最終的には姿を消したようです。

  3. エミュレーターを使用したローカルテストを可能にするようにホストファイルを構成します。

    127.0.0.1 myapplication.com api.myapplication.com

  4. この.NETcors実装を使用するには、WebApiプロジェクトで次のNugetコマンドを実行します。

    インストール-パッケージThinktecture.IdentityModel

  5. 次のクラス(投稿から取得)をWebApiプロジェクトに追加します。

    public static class CorsConfig
    {
        public static void RegisterCors(HttpConfiguration httpConfiguration)
        {
            WebApiCorsConfiguration corsConfig = new WebApiCorsConfiguration();
            corsConfig.RegisterGlobal(httpConfiguration);
    
            corsConfig
                .ForResources("Values") //Controller nae
                .ForOrigins("http://myapplication.com", "myapplication.com:81")
                .AllowAll();
        }
    }
    
  6. RegisterCors()からの呼び出しApplication_Start()

  7. WebApiプロジェクトのWeb.configに:OPTIONSの動詞があることを確認してください。ExtensionlessUrlHandler

      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    
  8. クロスオリジンリクエストを作成して、APIコントローラーをヒットします。

    $.ajax({ url: "http://api.myapplication.com/api/Values", ... })
    

そしてビオラ!

それが他の人を助けることを願っています

于 2013-03-27T07:57:41.933 に答える