0

ASP.NETサーバーがホストする角度のjs。 Web APIを呼び出しています。 POST Web APIをパラメータなしで実行すると、正常に動作します。しかし、POST Web APIにパラメータを渡すと、以下のエラーが発生します。 エラー: XMLHttpRequestは、http://localhost:60117/api/Partsをロードできません。プリフライト要求への応答がアクセス制御チェックを通過しない:要求されたリソースに「アクセス制御許可」がない。したがって、Origin http://localhost:64658はアクセスできません。

注:すでにコルナゲを有効にしています。 [EnableCors("*", "*", "*")]webapiconfig.cs

のコード以下
var cors = new System.Web.Http.Cors.EnableCorsAttribute("*", "*", "*"); 
     config.EnableCors(cors); 

後、私のリクエストヘッダである:

OPTIONS /api/Parts HTTP/1.1 
Host: localhost:60117 
Connection: keep-alive 
Access-Control-Request-Method: POST 
Origin: http://localhost:64658 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 
Access-Control-Request-Headers: content-type 
Accept: */* 
Referer: http://localhost:64658/app/views/Index.html 
Accept-Encoding: gzip, deflate, sdch, br 
Accept-Language: en-US,en;q=0.8 

はmulitpleは動詞のエラーを受け入れる与え、その後、web.configファイル内のコードの下に行うとき。

<httpProtocol> 
    <customHeaders> 
     <clear/> 
     <add name="Access-Control-Expose-Headers " value="WWW-Authenticate"/> 
     <add name="Access-Control-Allow-Origin" value="*"/> 
     <add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS, PUT, PATCH, DELETE"/> 
     <add name="Access-Control-Allow-Headers" value="accept, authorization, Content-Type"/> 
     <remove name="X-Powered-By"/> 
    </customHeaders> 
</httpProtocol> 

更新:

Now getting below request response message: 

The requested resource does not support http method 'POST'.

AJAX呼び出し:

$http({ 
     method: "POST",      
     url: config.APIURL + 'Parts', 
     data: {'final':'final'}      
}); 

は、ここで私を助けてください。この問題に立ち向かいました。

答えて

0

ポートの違いはクロスドメイン(xdomain)リクエストとして扱われるため、一部のブラウザはプリフライトOPTIONSリクエストを送信します。

あなたはそれらの要求を受け入れ、あなたがHTTPリクエストを可能にするために、サーバー側でCorsMessageHandlerクラスを追加する必要があるURL

http://enable-cors.org/server_aspnet.html

+0

すでにwebapiconfigでコアを有効にし、コントローラレベルでenablecoresを有効にしました。運はないが。 – dsi

+0

あなたはヘッダ 'Access-Control-Allow-Origin'が足りません。リクエストレスポンスを追加して、より良い答えを与えることができます。設定コードがコメントアウトされているのがわかります。 ''コメント – maurycy

+0

は、web.configにsystem.webserverを設定しました。 - ' PreflightレスポンスにおけるControl-Allow-Headers。 – dsi

-1

を以下のとおり200 OK を返すために、サーバーの設定にする必要があります。

0

あなたの試行に成功していない場合は、これを試すことができます。あなたのWEBAPIのごGlobax.asaxで 、以下の方法

protected void Application_BeginRequest() 
     { 
      if (Context.Request.HttpMethod == "OPTIONS") 
      { 
       Context.Response.AddHeader("Access-Control-Allow-Origin", Context.Request.Headers["Origin"]); 
       Context.Response.AddHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
       Context.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");      
       Context.Response.End(); 
      } 
    } 

そして、あなたのWEBAPI Configでは、CORS

config.EnableCors(); 

そして、あなたのコントローラ(複数可)内の属性を持っているを有効にするには、次のメソッド呼び出しを持っています

[EnableCors(origins: "*", headers: "*", methods: "*")] 

これは役立ちます。 詳細については、このサイトhttps://msdn.microsoft.com/en-us/magazine/dn532203.aspxを参照することもできます。 ありがとう

関連する問題