asp.net - 为什么向 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();
}
知道为什么会这样吗?
解决方案
原来这是 dotnet core sdk 的问题(在版本 2.2.101 上)。看到这个。解决方案是更新到最新版本,现在一切正常。
推荐阅读
- javascript - 根据 id 将数组中的 n 个对象合并为一个数组
- wordpress - ERR_CONNECTION_TIMED_OUT 托管在 GCP 上的 Wordpress 网站
- php - 试图在隐藏的类型上保存随机并得到错误
- c++ - 如何影响由 new 分配的内存并强制转换为数组 od 类对象?
- excel - Excel 条件格式 - 如果上面的未合并单元格符合条件,则最小值
- javascript - 当依赖于上下文状态时,反应停止组件的条件闪烁
- linux - 未能构建袖扣-2.2.1
- c# - 当我运行我的页面时,它返回一个 null 错误,就好像它没有捕获传入的信息一样
- c# - 如何使用流利断言断言一个集合是其他集合的子集合?
- bash - 当我想使用 bash 脚本在 tmux 中创建文件日志时应该怎么做?