无法向 .NET Core MVC 发出 HTTP 发布请求

Posted

技术标签:

【中文标题】无法向 .NET Core MVC 发出 HTTP 发布请求【英文标题】:Unable to make HTTP post request to .NET Core MVC 【发布时间】:2021-08-05 14:18:05 【问题描述】:

我目前正在开发一个使用 ASP.NET Core MVC 的项目(视图使用 Vue 在另一个端口上运行)。我已经设置了我的模型和控制器,并且我已经使用 swagger 测试了这些。它们完全按预期工作。我已经在 swagger 上测试了 post 方法并且它可以工作,但是从我的角度来看,在另一个运行 Vue 和 Postman 的端口上的请求会返回 405 错误。检查 Postman 上的响应标头,我可以看到“允许:DELETE、GET、PUT”。因为我的视图将在另一个端口上运行,所以我已经在我的启动配置方法中添加了以下 CORS(目前不担心安全隐患):

app.UseCors(builder => 
  builder.AllowAnyOrigin()
    .AllowAnyHeader()
    .AllowAnyMethod();
);

我的控制器具有以下 POST 方法:

[ResponseType(typeof (Review))]
[HttpPost]
public async Task Post(Review review)

  db.Reviews.Add(review);
  await db.SaveChangesAsync();

我正在从https://localhost:44334/reviews/Post 访问 Postman 上的 URL。评论是控制器,帖子是方法。我没有收到任何交叉原始控制错误,只有这个 405。为什么会这样,我该如何调试?


我试图发布到 https://localhost:44334/reviews/Post 但我的路由器没有这样设置。将 URL 更改为 https://localhost:44334/reviews/ 并将方法设置为 Post 工作并返回成功 200 响应。

【问题讨论】:

你能显示你的post请求代码吗?或者你如何使用 Postman。 您使用的是哪个版本的 .NET Core 运行时? @Sergey 对于 Postman,我选择“POST”方法并输入 URL localhost:44334/reviews/Post。我已将 JSON 直接添加到请求正文中或发送空请求。标题保持不变,我没有做任何更改。 您是否尝试删除 [ResponseType(typeof (Review))] 我不知道这是为了什么。 @JeremyCaney 我不确定,我认为这是最新版本。我该如何检查以及这会对我产生什么影响? 【参考方案1】:

这是一个很常见的问题。对于来自 localhost AllowAnyOrigin() 的请求不起作用。您需要明确允许来源:

services.AddCors(options => options.AddPolicy("ApiCorsPolicy", builder =>

     builder.WithOrigins("http://localhost:8080").AllowAnyMethod().AllowAnyHeader();
));

在配置方法中告诉 CORS 使用你刚刚创建的策略:

app.UseCors("ApiCorsPolicy");

邮递员的请求通过了 CORS,因为它们附加了特殊的标头。

【讨论】:

来自 PostMan 的 Post 请求仍然收到 405 错误。 您提到您的前端是用 Vue 编写的,因此您绝对应该使用 Web API 而不是 MVC 我想最终为我的后端使用一些剃刀页面视图。即使我不是,它对我的​​项目有实质性的影响吗?

以上是关于无法向 .NET Core MVC 发出 HTTP 发布请求的主要内容,如果未能解决你的问题,请参考以下文章

如何从 ASP.NET 核心 mvc 向 asp.net 核心中的 Web API 发出 PUT 请求?

asp.net Core MVC 2 - 配置 CORS 以接受 NULL 来源

如何在 ASP.NET Core MVC 中使用 ADO.NET 向存储过程添加参数?

ASP.NET Core mvc 应用程序中的 FFMPEG 录制

AspNetCoreRateLimit - ASP.NET Core 速率限制中间件。

无法向会话状态服务器发出会话状态请求请。确保 ASP.NET State Service (ASP.NET 状态服务)已启动