[英]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#對象
您需要使用標頭來告訴API方法您要發送的內容。
您需要在.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.