【问题标题】:Unable to make HTTP post request to .NET Core MVC无法向 .NET Core MVC 发出 HTTP 发布请求
【发布时间】: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 我不确定,我认为这是最新版本。我该如何检查以及这会对我产生什么影响?

标签: asp.net-core .net-core asp.net-core-mvc cors rest


【解决方案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
  • 我想最终为我的后端使用一些剃刀页面视图。即使我不是,它对我的​​项目有实质性的影响吗?
猜你喜欢
  • 2021-05-29
  • 2020-01-23
  • 1970-01-01
  • 1970-01-01
  • 2012-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多