2016-12-17 2 views
-1

私は角2を学んでいます。これは、ASP.NET Web APIアプリケーションからデータを取得するはずのサービスです。ASP.NET Web APIでCorsを有効にする方法

@Injectable() 
export class ExpenseService { 
    private _expUrl = "http://localhost:65400/api/expenses"; 

    constructor(private _http: Http){}  

    getExpenses(): Observable<IExpense[]> { 
    return this._http.get(this._expUrl) 
     .map((response: Response) => <IExpense[]>response.json()) 
     .do(data => console.log('ALL: ' + JSON.stringify(data))) 
     .catch(this.handleError) 
    }  
    //more here... 
} 

上記のコードはMicrosoft Edgeで正常に動作しています。多くの記事で示唆したように、私は私のウェブAPIでCORSを有効にしている

XMLHttpRequest cannot load http://localhost:65400/api/expenses. 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://localhost:3000' is therefore not allowed 

:しかし、ChromeとFirefoxで、私は次のエラーを取得しています。

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddCors(); 
    //... 
} 

public void Configure(IApplicationBuilder app, IHostingEnvironment env, 
     ILoggerFactory loggerFactory) 
{ 
    //... 
    app.UseCors(builder => 
      builder.WithOrigins("http://localhost:3000/")); 
} 

結果は変わりませんでした。 Edgeがうまく動作している間は、ChromeとFireFoxで同じエラーが発生しています。

+1

クライアント側のコードは完全に無関係である、CORSは、サーバー側を実装しなければならない、それはそれが利用可能ではなく、JavaScriptのだ決定ブラウザです。あなたの質問は、それを.NETで実装する方法でなければなりません。これは研究するのは難しいはずはありません....このサイトには何千ものCORSの質問があり、それに専念するウェブサイトと他の多くのウェブリソース – charlietfl

+1

みんな、すべての質問を投票停止します。私はCORSについて何も知らない。私はエラーが発生しているので、ここで助けを求めています。私はタイトルを変更する必要がありますか? – Richard77

+1

はい、いくつかの調査を行う必要があります。毎週何百ものCORSの質問が寄せられます – charlietfl

答えて

2

CORSを支援するための

おかげで、サーバーでサポートされているクライアントによって強制されている何か、です。

CORSは、ユーザーとしてあなたを助けるためのものです。これは、ホストgoogle.comのjavascriptのようなクライアントがmydomain.comのサービスを呼び出す可能性を制限します。これはクロムとFireFoxが許可しないクロスドメインコールです。 (Edgeもこれをサポートしていると仮定します)。ホストとポート上でサービスとクライアントをホストする場合、CORSは使用されません。

サービスでは、クロスドメインのどのホストが許可されているかを定義する必要があります。これは、すべてのホストからでも、特定のホストからでもかまいません。すべてのホストからのアクセスを許可するように

は、次のようにします。

設定

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddCors(); 
} 

コントローラ

[EnableCors("AllowSpecificOrigin")] 
public class TestController : ApiController 

あなたのサービスが公共サービスの場合は、の点に注意してください。結果。あなたがここで多くを読むことができます

https://docs.microsoft.com/en-us/aspnet/core/security/cors

+0

私はasp.netコアを使用しています。 – Richard77

+0

これをタグとして追加すると、わかりません。しかし、それは同じ原理です。リンクに従ってください.... – Michael

+0

私はこのリンクも見ました。 http://www.dotnetfunda.com/articles/show/3349/pagination-in-angularjs-by-resolving-cors-in-web-api-with-aspnet-core – Richard77

関連する問題