2017-06-08 116 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