AllowAnyMethod适用于某些API调用,但不适用于其他API

时间:2018-12-08 19:55:59

标签: c# angular asp.net-core-webapi

我有this question中提到的表格,但是提交后会得到

  

跨域请求被阻止:“同源起源”策略禁止读取http://localhost:1113/api/loans处的远程资源。 (原因:CORS标头“ Access-Control-Allow-Origin”缺失)。

  

跨域请求被阻止:“同源起源”策略禁止读取http://localhost:1113/api/loans处的远程资源。 (原因:CORS请求未成功。)

我之前通过将其添加到Configure中API的Startup中来解决了另一个API调用:

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

但是现在由于某种原因,它阻止了操作所在的呼叫

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

为什么?

2 个答案:

答案 0 :(得分:1)

尝试使用 let highest = a.last! ^ ()

[FromBody]

当您尝试发送时,请使用JSON.stringify而不是直接使用

public void Post([FromBody] Loan loan)

答案 1 :(得分:1)

这是一个模糊的问题,因此我将给出一些提示。

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