2017-08-13 97 views
5

我在使用Asp核心Web API的Angular 4应用程序,我使用不同的端口在locahost上进行测试。我的WebApi需要Windows身份验证(需要获取登录用户名)。所有使用GET的调用工作,但不幸的是,我不能让POST工作。我对CORS的WebAPI设置:Asp.net Core CORS与GET协同工作,但不支持POST

 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) 
    ) 
} 

我的错误:

的XMLHttpRequest无法加载http://localhost:495/api//upload。请求的资源上没有“Access-Control-Allow-Origin”标题。因此不允许访问原产地'http://localhost:4200'。响应有HTTP状态代码500。

和响应头

的Content-Length:0 日期:孙老师,2017年8月13日13时13分09秒GMT 持久验证:真 服务器:红隼 X -Powered-者:ASP.NET X-SourceFiles:= UTF-的8B QzpcU291cmNlIENvZGVcUGFydG5lcnNoaXBDYXRhbG9nXFBhcnRuZXJzaGlwQ2F0YWxvZ1xQYXJ0bmVyc2hpcENhdGFsb2cuV2ViQXBpXGFwaVx1cGxvYWQ = =

任何帮助,将不胜感激????!

+0

检查http://enable-cors.org。它看起来像你添加Cors的方式不起作用。检查Chrome网络选项卡是否有http请求。单击请求查看请求和响应详细信息。而不是通过你的应用程序调用,检查与提琴手或铬扩展像邮递员或高级休息。您也可以尝试单独启用个别类,方法或web.config中的cors。 – Amit

+2

请发布您的异常堆栈/消息。当发生ASP.NET Core中的异常时,异常中间件将**清除头文件**,因此CORS头文件会丢失。看看是什么导致异常并解决异常,那么它应该可以工作,发生异常时返回HTTP代码500 – Tseng

+0

您可以确认'UserCors'在'Configure'方法中的任何'UseMvc'调用之前吗? – regnauld

回答

0

你需要的东西是这样的:

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

通知AllowCredentials()

你还需要在你的Startup文件Configure方法:

app.UseCors("CorsPolicy"); 
+0

是的,我确实有app.UseCors(“AllowAll”)并添加预检也没有帮助。 –

相关问题