2017-10-10 20 views
2

Web APIでWebサービスを作成し、Angular 2アプリケーションから使用しようとします。 Microsoft.AspNet.WebApi.Core 5.2.3をインストールし、corsを許可するように構成します。 それは/ localhostのでローカルIIS上RestfulAPIweb api 2 cors not working

WebApiConfig

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 

     // Web API routes 
     config.MapHttpAttributeRoutes(); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi 2", 
      routeTemplate: "api/{controller}/{action}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

     var cors = new EnableCorsAttribute("*", "*", "*"); // origins, headers, methods 
     config.EnableCors(cors); 
    } 
} 

コントローラ

[HttpGet] 
[Route("api/product/details")] 
public async Task<IHttpActionResult> GetProductsDetails([FromUri]ProductSearch model) 
{ 
    using (var unitOfWork = Factory.Create()) 
    { 
     var products = (from p in await unitOfWork.GetProductsAsync(model?.CategoryID, model?.BrandID, model?.ProductStateID, null, model?.PartnerID, 
        true, model?.Code) 
      orderby p.Code 
      select p).ToArray(); 
     return return Json(products); 
    } 
} 

を開催しました。しかし、私はまだブラウザにエラーを取得しています。

プリフライト要求に応答しても、アクセス制御チェックを通過しません。要求されたリソースには、「Access-Control-Allow-Origin」ヘッダーがありません。 Origin 'http://localhost:12012'はアクセスできません。応答にHTTPステータスコード404がありました。

どのようにすべてのコードを有効にしても、まだ動作しませんでしたか?

Upd.1。 私は怒鳴る

public class PreflightRequestsHandler : DelegatingHandler 
     { 
      protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
      { 
       if (request.Headers.Contains("Origin") && request.Method.Method.Equals("OPTIONS")) 
       { 
        var response = new HttpResponseMessage { StatusCode = HttpStatusCode.OK }; 
        // Define and add values to variables: origins, headers, methods (can be global)    
        response.Headers.Add("Access-Control-Allow-Origin", "*"); 
        response.Headers.Add("Access-Control-Allow-Headers", "*"); 
        response.Headers.Add("Access-Control-Allow-Methods", "*"); 
        var tsc = new TaskCompletionSource<HttpResponseMessage>(); 
        tsc.SetResult(response); 
        return tsc.Task; 
       } 
       return base.SendAsync(request, cancellationToken); 
      } 

     } 

ように要求するが、エラーを取得するオプションを処理しよう:リクエストヘッダフィールドのContent-Typeは、プリフライト応じて、アクセス制御 - 許可 - ヘッダによって許可されていません。

+0

これはオプションのリクエストではありませんか? –

+0

違いがあれば教えてください。この場合、どのように有効にするのですか? –

+0

すべての前に、EnableCorsをメソッドの先頭に移動してみてください。 – jpgrassi

答えて

0

Apicontrollerクラスを継承するプレーンコントローラではなく、Apiコントローラを使用していることを確認してください。 私は同じ問題を抱えていましたが、私はプレーンなコントローラを使っていましたが、私はそれを修正しました。私はアクセスできず、APIコントローラからデータを取得できません。