簡體   English   中英

AllowAnyMethod適用於某些API調用,但不適用於其他API

[英]AllowAnyMethod works for some API calls but not for others

我有這個問題中提到的表格,但是提交后我得到了

跨域請求被阻止:同源策略禁止讀取位於http:// localhost:1113 / api / loans的遠程資源。 (原因:CORS標頭“ Access-Control-Allow-Origin”缺失)。

跨域請求被阻止:同源策略禁止讀取位於http:// localhost:1113 / api / loans的遠程資源。 (原因:CORS請求未成功)。

我之前通過將其添加到API的“ Startup Configure中來解決了另一個API調用的問題:

app.UseCors(options => options.WithOrigins("*").AllowAnyMethod());

但是現在由於某種原因,它阻止了操作所在的呼叫

// POST api/loans
[HttpPost]
public void Post(Loan loan)
{
    _context.Loans.Add(loan);
    _context.SaveChanges();
}

為什么?

嘗試使用[FromBody]

public void Post([FromBody] Loan loan)

當您嘗試使用JSON.stringify而不是直接發送模型時,

this.http.post('http://localhost:1113/api/loans', JSON.stringify(this.model), config).subscribe(data => {
  console.log(data);
});

這是一個模糊的問題,因此我將給出一些提示。

  1. 首先通過打開所有異常開始。在cors發生之前,您很可能會遇到異常,因此您的應用程序在返回錯誤響應之前,才可以添加cors標頭。

  2. .Net-Core require屬性用於解決如何對數據進行模型綁定。 因此,您的http post方法應該要求[FromForm]或[FromBody]屬性

     [HttpPost] public void Post([FromForm] Loan loan) { _context.Loans.Add(loan); _context.SaveChanges(); } 
  3. 確保您實際上正在使用自己的cors政策。 除非您使用舊版本的.Net Core,否則您應該通過Configure Services方法而不是configure方法來實現cors策略

嘗試像這樣執行您的政策:

services.AddCors(options =>
{
    options.AddPolicy(DEFAULT_POLICY_NAME, policy =>
    {
        policy.SetIsOriginAllowedToAllowWildcardSubdomains() 
             .AllowAnyOrigin()
             .AllowAnyHeader()
             .AllowAnyMethod()
             .AllowCredentials();
    });
});

然后在您的configure方法中,您只需使用策略名稱

app.UseCors(DEFAULT_POLICY_NAME);

暫無
暫無

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

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