1

ドットネットフレームワーク4.6.1でAngular 5とWeb Apiバージョンの新しいアプリケーションを作成すると、5.2.3になります。このAPIはVS2017で作成された個人認証を備えた新しいWeb APIプロジェクトです。 apiの唯一の変更は、Corsライブラリが追加されたStartup.Auth.csの次の行です。角度アプリ、ログインおよびレジスタからWeb APIベアラー認証で角度をつけ続ける

app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); 

が働いているが、このようなAPI /アカウント/ログアウトなどのエンドポイントを含むWeb APIを呼び出すときに許可することはできません。

このエラーで失敗します。 corsエラーはありません。

このリクエストでは承認が拒否されました。

角度コード。

var token = localStorage.getItem("accessToken"); 
let headers = new HttpHeaders(); 
headers.set('Authorization', 'Bearer ' + token); 

this._http.post(environment.authApiUrl + 'api/Account/Logout', { headers: headers}).subscribe(
    data => { 
    localStorage.removeItem("userName"); 
    localStorage.removeItem("accessToken"); 

    this.isLoggedin = false;   
    this._router.navigate(['/home']); 
    }, 
    errors => console.log(errors) 
); 

私が間違っていたことは考えられないので、jqueryで書き直そうとしました。魅力のように動作します。 Apiの変更はまったくありません。私はAngularで何が間違っているのですか?

+0

エラーの詳細を教えてください。何をしようとしているのか、何がうまくいっているのか、正確に何がエラーなのか... – hogan

答えて

1

と同じURLに代わりhttps://angular.io/api/http/Jsonp、または

  • 作業をバックエンドでCORSを設定、または
  • 使用JSONPのどちらかあなたのコードでヘッダーを調べると、実際には送信されていないことがわかります。 DocsHttpHeadersの説明のための状態:

    HTTPヘッダの不変集合。

    前のヘッダ(Http)からそう違い、あなたができる:今

    let headers = new Headers(); 
    headers.set('Authorization', 'Bearer ' + token); 
    

    HttpClient)をあなたがする必要があります。

    let headers = new HttpHeaders() 
        .set('Authorization', 'Bearer ' + token) 
    

    または代わり:

    let headers = new HttpHeaders() 
    headers = headers.set('Authorization', 'Bearer ' + token); 
    

    because ...

    HttpHeadersは不変である - すべての突然変異操作は新しいインスタンスを返します。

  • +0

    それは本当に問題でした。それは今の魅力のように働く。どうもありがとう。 – lawphotog

    +0

    素晴らしい、それがうまくいって聞いてうれしい! :) – Alex

    0

    申し訳ありませんが、もう一度読んで、「いいえコルエラー」と言いますので、以下の回答は無視してください。

    旧回答

    私は..角度とjQueryの方法との違いは、正確に、私は1つが他の1フェッチXHRであると仮定し何を言うことはできませんが、ここで私を見極めるません。

    私は同様の問題を抱えていましたが、「いいえ」というエラーが表示された場合、リクエストは実際にはうまく機能していますが、ブラウザはここであなたを保護しようとします。私の強い思いは、Angularはこのブラウザメカニズムが起動し、jQueryが動作しないテクニックを使用しているということです。

    かいつまん:

    問題は、フロントエンドのURLがあなたのバックエンドとは異なることです。あなたのブラウザはそれを気に入らず、プリフライトリクエストを行います。

    ソリューション:

    • 場合は、フロントエンドとバックエンドの両方