簡體   English   中英

Angular 2 http.post不適用於Web API

[英]Angular 2 http.post not working with web api

我的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帖子看起來像這樣

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

因此,如果我獲得用戶標頭,則不會顯示“ Access-Control-Allow-Origin”標頭

如果我不使用標題,我會得到(不支持的媒體類型)

不知道這是怎么回事。 UPDATE,所以我按照第一個答案中的說明進行操作,看起來CORS沒有設置屬性,但是現在JSON尚未轉換為C#對象 在此處輸入圖片說明

  1. 您需要使用標頭來告訴API方法您要發送的內容。

  2. 您需要在.Net Core應用程序Startup.cs啟用CORS,以便您的API允許來自其他來源的請求(基本上接受來自客戶端應用程序URL的調用),並將CORS設置為AllowAnyMethod()

您可以在ConfigureServices()方法中使用以下代碼來執行此ConfigureServices()

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

然后最后在您的Configure()方法中:

app.UseCors("CorsPolicy");

請注意,我使用的策略名稱"CorsPolicy"只是一個示例,您可以隨意命名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM