asp net core 3发布后,对带有正文内容的POST操作获取BadRequest响应

D发明家

我正在建立一个使用asp.net core 3的网站,该网站托管在Debian 9服务器上,使用nginx作为反向代理。我遇到的问题是,当我在Visual Studio中本地运行应用程序时,我的POST请求可以工作,但是当我发布该应用程序并将其上传到我的服务器时,它们突然不再起作用了。

这是我用于测试的控制器:

public class TestController : Controller
{
    [HttpPost]
    public IActionResult Ping()
    {
        return Ok();
    }

    [HttpPost]
    public IActionResult Echo(string message)
    {
        return Ok(message);
    }

    [HttpPost]
    public IActionResult FormEcho([FromForm]string message)
    {
        return Ok(message);
    }
}

我正在使用邮递员来测试这些端点。

Ping

  • 使用不带任何参数的发布请求将在本地和服务器上按预期提供200。
  • 使用带有x-www-form-urlencoded内容的发布请求会在本地提供200,但在服务器上提供400。

Echo

  • 具有查询字符串参数的发布请求在本地和服务器上均返回代码为200的消息。
  • 带有x-www-form-urlencoded内容的带有消息的发布请求在本地返回带有代码200的消息,但在服务器上给出400。

FormEcho

  • 带有x-www-form-urlencoded内容的带有消息的发布请求在本地返回带有代码200的消息,但在服务器上给出400。

通过该测试,我认为以某种方式在服务器上拒绝带有正文内容的发布请求。我还从日志中注意到,对于在服务器上返回400的请求,日志中没有任何内容,就好像该请求甚至没有到达我的应用程序一样。

为什么我的应用程序拒绝带有正文内容的发布请求?


编辑:
这是我在nginx中的配置:

server {
    listen        443 ssl;
    listen        [::]:443 ssl;

    include snippets/self-signed.conf;
    include snippets/ssl-params.conf;

    server_name   51.38.35.10;

    error_log /var/log/nginx/error.log info;

    location / {
        proxy_pass         http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection 'upgrade';
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

server {
    listen        80;
    listen        [::]:80;

    server_name   51.38.35.10;

    return 302 https://$server_name$request_uri;
}

如果ASP.NET Core应用程序甚至没有记录传入请求(而其他应用程序仍在工作),那么看来它实际上并没有获得任何传入请求。在这种情况下,可能是您的反向代理配置不允许这些请求传递到您的应用程序。

我通常通过nginx对ASP.NET Core应用程序使用以下配置:

location / {
    proxy_pass         http://localhost:5000;
    proxy_http_version 1.1;
    proxy_set_header   Upgrade $http_upgrade;
    proxy_set_header   Connection keep-alive;
    proxy_set_header   Host $host;
    proxy_cache_bypass $http_upgrade;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Proto $scheme;
}

这也是官方ASP.NET Core文档建议

Connection特别是设置不同的标头值Upgrade似乎有些问题。我个人已经看到UpgradeUpgradeWebSocket的HTTP标头一起使用时

因此,调整nginx配置可能会解决您的问题。

注意 Connection keep-alive

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ASP.NET Core POST 操作错误

来自分类Dev

asp .net 和 asp .net core 有什么区别?

来自分类Dev

ASP.NET Core令牌获取异常

来自分类常见问题

ASP.NET 5,.NET Core和ASP.NET Core 5有什么区别?

来自分类Dev

创建项目ASP.NET Core(.NET Core)和ASP.NET Core(.NET Framework)有什么区别

来自分类Dev

Asp Net core 3的配置是否与Asp Net core 3无关?

来自分类Dev

共享cookie .net Core 3和Asp.net

来自分类Dev

asp.net core 3响应缓存未按预期工作

来自分类Dev

.NET Standard和.NET Core 3.x或ASP.NET Core 3.x

来自分类Dev

带有EntityFramework.Core的ASP.NET vNext

来自分类Dev

路由中带有ID的ASP.NET Core表单

来自分类Dev

带有JSONP的ASP.NET Core MVC

来自分类Dev

带有ASP.NET Core 3.0的JsonSerializer Struct

来自分类Dev

带有ASP.NET Core 3.1的JsonHttpContent

来自分类Dev

带有JSONP的ASP.NET Core MVC

来自分类Dev

获取ASP.NET Core 1中的所有缓存

来自分类Dev

ASP.NET Core MVC检查回发授权

来自分类Dev

重新读取ASP.NET Core中的请求正文

来自分类Dev

将带有ASP.NET Core 2.2的Autofac Multitenant升级到ASP.NET Core 5

来自分类Dev

ASP.NET Core返回

来自分类Dev

ASP.NET Core WebSockets

来自分类Dev

发布ASP.NET Core项目时出错

来自分类Dev

如何排除文件在ASP.NET Core中发布?

来自分类Dev

在Asp.net Core中将字典发布到Web API

来自分类Dev

将复杂的JSON发布到ASP.NET Core Controller

来自分类Dev

ASP.NET Core发布到Azure(暂存)

来自分类Dev

发布到IIS ASP.NET Core 3.1

来自分类Dev

是否发布了ASP.NET Core RC2?

来自分类Dev

ASP.NET Core 发布时的预编译视图