首页 > 解决方案 > 为什么向 asp.net core 发送 POST 请求失败?

问题描述

我有一个 ASP.net 核心 API 项目,我试图在 Firefox 中向它发送 POST 请求,但我总是收到一条错误消息:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://localhost:44302/api/posts. (Reason: CORS request did not succeed).

如果我查看发送的请求,我可以看到它是一个返回的 OPTIONS 请求204 No Content。POST 请求根本没有发送,我可以通过检查内容是否更改来验证。

在此处输入图像描述

Chrome 是一个不同的故事。当我发送相同的请求时,我会收到不同的错误消息:

POST https://localhost:44302/api/posts net::ERR_INVALID_HTTP_RESPONSE

这次我可以看到 2 个请求发送:

在此处输入图像描述

看起来像这样:

在此处输入图像描述

和这个:

在此处输入图像描述

最后,如果我在 Postman 中尝试,它工作得很好。

这是我用来发送请求的代码:

async createPost () {
  const timestamp = new Date()
  const data = {
    title: 'Some test post',
    body: 'Some test content',
    timePosted: timestamp,
    timePublished: timestamp,
    timeUpdated: timestamp,
    isVisible: true
  }
  const response = await axios.post('https://localhost:44302/api/posts', data)
  // do something with the response
},

这是该路由的控制器操作设置:

[HttpPost("api/posts/")]
public ActionResult Create([FromBody] BlogPost blogPost)
{
    _blogPostService.Create(blogPost);
    return CreatedAtAction("Create", blogPost);
}

这是我用于 BlogPost 的模型:

public class BlogPost
{
    public int Id { get; set; }

    public string Title { get; set; }

    public string Body { get; set; }

    public DateTime TimePosted { get; set; }

    public DateTime TimePublished { get; set; }

    public DateTime TimeUpdated { get; set; }

    public bool IsVisible { get; set; }
}

这就是我设置 CORS 的方式:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options => {
        options.AddPolicy("AllowAll", policy => {
            policy.WithOrigins("http://localhost:8080")
                .AllowAnyMethod()
                .AllowAnyHeader()
                .AllowCredentials();
        });
    });
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseCors("AllowAll");
    app.UseMvc();
}

知道为什么会这样吗?

标签: asp.netcorsaxios

解决方案


原来这是 dotnet core sdk 的问题(在版本 2.2.101 上)。看到这个。解决方案是更新到最新版本,现在一切正常。


推荐阅读