2017-08-13 23 views
5

私は異なるポートのロカホストでテストするAspコアWeb APIを使用してAngular 4アプリを使用しています。 WebApiにはWindows認証が必要です(ログオンユーザー名を取得する必要があります)。 GETを使用しているすべての呼び出しが機能しますが、残念ながらPOSTを動作させることはできません。Asp.netコアCORSはGETで動作しますがPOSTは使用しませんPOST

のXMLHttpRequestがhttp://localhost:495/api//uploadをロードすることはできません。

 public void ConfigureServices(IServiceCollection services) 
    { 
     // Add framework services. 
     services.AddApplicationInsightsTelemetry(Configuration); 
     services.AddDbContext<CatalogContext>(options => 
      options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); 
     services.AddCors(options => 
     { 
      options.AddPolicy("AllowAll", builder => 
      { 
       builder.AllowAnyOrigin() 
        .AllowAnyHeader() 
        .AllowAnyMethod() 
        .AllowCredentials(); 
      }); 

     }); 
     services.AddMvc(); 
    } 

と角4クライアントがファイルに

fileChange(event) { 
let fileList: FileList = event.target.files; 
if (fileList.length > 0) { 
    let file: File = fileList[0]; 
    let formData: FormData = new FormData(); 
    formData.append('uploadFile', file, file.name); 
    let headers = new Headers(); 
    /** No need to include Content-Type in Angular 4 */ 
    headers.append('Content-Type', 'multipart/form-data'); 
    headers.append('Accept', 'application/json'); 

    let options = new RequestOptions({ headers: headers, withCredentials: true }); 
    this.http.post("http://localhost:495/api//upload",formData, options) 
    .map(res => res.json()) 
    .catch(error => Observable.throw(error)) 
    .subscribe(
    data => console.log('success'), 
    error => console.log(error) 
    ) 
} 

私の誤りを投稿しようとしている:私は、CORSのためWEBAPIを設定しています。要求されたリソースに「Access-Control-Allow-Origin」ヘッダーが存在しません。 Origin 'http://localhost:4200'はアクセスできません。応答は、HTTPステータスコード500

と応答ヘッダを持っていた

のContent-Length:0 日:日、2017年8月13日午前13時13分09秒GMT 永続-AUTH:真 サーバー:チョウゲンボウ X -Poweredバイ:ASP.NET X-、ソースファイル:????= UTF-8 B QzpcU291cmNlIENvZGVcUGFydG5lcnNoaXBDYXRhbG9nXFBhcnRuZXJzaGlwQ2F0YWxvZ1xQYXJ0bmVyc2hpcENhdGFsb2cuV2ViQXBpXGFwaVx1cGxvYWQ = =

任意の助けをいただければ幸いです!

services.AddCors(options => 
     { 
     options.AddPolicy("CorsPolicy", 
      builder => 
      builder.AllowAnyOrigin() 
      .AllowAnyMethod() 
      .WithExposedHeaders("content-disposition") 
      .AllowAnyHeader() 
      .AllowCredentials() 
      .SetPreflightMaxAge(TimeSpan.FromSeconds(3600))); 
     }); 

お知らせAllowCredentials()

+0

チェックhttp://enable-cors.org。それはあなたがcorsを追加しているように動作していないように見えます。 http要求のクロムネットワークタブを確認してください。要求を個別にクリックすると、要求と応答の詳細が表示されます。あなたのアプリケーションを呼び出す代わりに、郵便配達員や先進の休憩のようなフィドラーやクロムの拡張機能で確認してください。個々のクラス、メソッド、またはweb.configで個別に有効にすることもできます。 – Amit

+2

例外のスタック/メッセージを投稿してください。 ASP.NET Coreの例外が発生すると、例外ミドルウェアは**ヘッダーをクリアします**ので、CORSヘッダーが失われます。何が例外を引き起こして例外を解決したら、それはうまくいくはずです。例外が発生したときにHttpコード500が返されます。 – Tseng

+0

'UserCors'が' Configure'メソッドの 'UseMvc'呼び出しの前にあることを確認できますか? – regnauld

答えて

0

あなたはこのようなものが必要。

また、あなたのStartupファイルConfigure方法では、必要があります。

app.UseCors("CorsPolicy"); 
+0

はい、私はapp.UseCors( "AllowAll")を持っていますが、プリフライトを追加しても問題はありません。 –

関連する問題