2017-08-03 18 views
1

Windows認証を有効にして、バックエンドでASP.NET web api 2で角度4を使用しています。私は1つの投稿を持ち、1つはapiを取得します。 GETは正常に動作します。しかし、POSTのために、私はプリフライトのために、このエラー角度4のHTTP POST with Windows認証のプリフライトの問題

応答が無効なHTTPステータスコード私は、理由OPTIONSケースではありません知っている私は、OPTIONSメソッドの不正のエラーを取得しています意味401

を持って取得していますメソッドがユーザーの資格情報で呼び出されることはありません。また、私はweb.configファイルの私の認証ブロックに次き

 <add name="Access-Control-Expose-Headers " value="WWW-Authenticate"/> 
     <add name="Access-Control-Allow-Origin" value="http://localhost:4200" /> 
     <add name="Access-Control-Allow-Headers" value="accept, authorization, Content-Type" /> 
     <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" /> 
     <add name="Access-Control-Allow-Credentials" value="true" /> 

を次のように私は私のウェブの設定で、すべてのCORSヘッダーを設定している

 let requestOptions = new RequestOptions({ 
     withCredentials: true, 
     headers: new Headers({ 
     'content-type': 'application/json' 
     }) 
    }) 
    this.http.post("someapiendpoint", JSON.stringify(data), requestOptions).subscribe(data => { 
     debugger; 
    }); 

を次のように私は、APIを呼び出していた角度で

私は

を削除しようとした
   <authentication> 

       <anonymousAuthentication enabled="false" userName="" /> 

       <basicAuthentication enabled="false" /> 

       <clientCertificateMappingAuthentication enabled="false" /> 

       <digestAuthentication enabled="false" /> 

       <iisClientCertificateMappingAuthentication enabled="false"> 
       </iisClientCertificateMappingAuthentication> 

       <windowsAuthentication enabled="true"> 
        <providers> 
         <add value="Negotiate" /> 
         <add value="NTLM" /> 
        </providers> 
       </windowsAuthentication> 

      </authentication> 

続き

headers: new Headers({ 
      'content-type': 'application/json' 
      }) 

私の角度コードからWeb APIのための私のコントローラのコード

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Web.Http; 
using System.DirectoryServices; 
using System.DirectoryServices.AccountManagement; 

namespace Backend.Controllers 
{ 
    public class DemoController : ApiController 
    { 
     Entities db = new Entities(); 
     public DemoController() 
     { 
     } 

     [HttpPost] 
     [ActionName("postevent")] 
     public IHttpActionResult PostEvent(Demo data) 
     { 
      db.Demos.Add(data); 
      db.SaveChanges(); 
      return Ok(); 
     } 

    } 
} 

ですが、それは助けにはなりませんでした。私も 'text/html'と置き換えようとしましたが、うまくいきませんでした。ある人が私に何が間違っているか教えてもらえますか? GETのために働いているとうまくいくはずです。

+0

どのWeb APIシステムを使用していますか? –

+0

C#Web API 2.0の場合、 '[HttpPost]'属性を指定してpostメソッドを宣言する必要があります。 –

+0

@BaileyMillerはいこれを行い、アクション名とルートを追加しました –

答えて

1

匿名認証を完全に無効にすることはできませんが、OPTIONSのフライト前のリクエストは機能しません。これは、次のとおりです。WebAPI CORS with Windows Authentication - allow Anonymous OPTIONS request

基本的ソリューションはOPTIONSがへの呼び出しできるようにすることです:

は、例えば、このトピックを参照してください:W3C仕様によると

、ブラウザが CORSのプリフライトからユーザーの資格情報を除外します認証なしで通過します。これが可能であるためには、匿名認証を有効にする必要があります。この質問に

401 response for CORS request in IIS with Windows Auth enabled 答えはパウロの答えが正しいか、以下のweb.config

<system.web> 
    <authentication mode="Windows" /> 
    <authorization> 
     <allow verbs="OPTIONS" users="*"/> 
     <deny users="?" /> 
    </authorization> 
</system.web> 
+0

これは役に立たなかった –

1

を示唆しています。私はまったく同じセットアップがあり、うまく動作します。

匿名認証とWindows認証の両方を有効にし、ポールの回答からweb.configにスニペットを追加して、認証されていないOPTIONS要求を許可し、コントローラに[認証]属性を追加する必要があります。

関連する問題