2017-06-08 67 views
0

我的Web API核心控制器的方法是这样的角2 http.post不使用Web API工作

public void Post(Sample sample) { 
     _sampleService.CreateSample(sample); 
    } 

样品POCO看起来像这样

public class Sample : BaseEntity 
{ 
    public string BarCode { get; set; } 
    public DateTime CreatedAt { get; set; } 
    public virtual User CreatedBy { get; set; } 
    public virtual Status Status { get; set; } 
} 

客户端采样对象上仅发送2个属性现在看起来像这样。

{barcode:"1234"createdAt:"2017-06-07"} 

和HTTP POST看起来像这样

createSample(sample: Sample) { 
let headers = new Headers(); 
headers.append('Content-Type', 'application/json'); 
return this.http.post(AppConstants.createSample, JSON.stringify(sample), { headers: headers }) 
    .map((res: Response) => res.json()); } 

所以,如果我的用户头我没有得到任何“访问控制允许来源”标头现在

,如果我不使用页眉我得到(Unsupported Media Type)

任何想法这里发生了什么。 UPDATE 所以我也跟着在第一个答案说明,看起来像CORS未设置属性,但现在JSON没有被转换为C#对象 enter image description here

+0

看起来像一个CORS问题。 –

+0

没有CORS问题的其余呼叫正在工作。 CORS已全球启用 –

回答

1
  1. 您需要使用头文件告诉API方法你发送的是什么。

  2. 您需要启用在.NET核心应用Startup.cs CORS让你的API允许从其他产地来请求(接受来自您的客户端应用程序的URL电话,基本上) - 并设置CORS到AllowAnyMethod()

  3. Configure()方法

    var corsUrls = new List<string>(){"http://localhost:4200", "https://mylivesite.com"}; 
    
    services.AddCors(o => o.AddPolicy("CorsPolicy", builder => 
    { 
        builder 
         .AllowAnyMethod() //<--this allows preflight headers required for POST 
         .AllowAnyHeader() //<--accepts headers 
         .AllowCredentials() //<--lets your app send auth credentials 
         .WithOrigins(corsUrls.ToArray()); //<--this is the important line 
    })); 
    
    services.Configure<MvcOptions>(
        options => { options.Filters.Add(new CorsAuthorizationFilterFactory("CorsPolicy")); }); 
    

    然后最后:

你用下面的代码在你ConfigureServices()方法做到这一点

app.UseCors("CorsPolicy"); 

请注意,我用的策略名称"CorsPolicy"只是一个例子,你可以说它是任何你喜欢的。

+0

将在几分钟内尝试此操作 –

+0

您可以查看更新 –

+0

这是您的客户端和服务器之间的映射问题 - 我的猜测是它因为您的案例不匹配而且您没有在您之后设置以下内容调用services.AddMvc(...)'mvcBuilder.AddJsonOptions( X => x.SerializerSettings.ContractResolver =新CamelCasePropertyNamesContractResolver());' – Steveland83