DotNet Core应用程序不接受Linux上的POST

时间:2018-02-09 14:31:06

标签: ubuntu nginx asp.net-core asp.net-core-2.0

这是我的第一个DotNetCore 2.0应用程序,我想用它来比较IIS / Windows和nginx / Ubuntu之间的性能。它是一个应用程序,与许多服务(mongo / redis /会话状态)进行对话,以创建虚假但真实的用户旅程。

该应用程序在Windows上运行时非常正常,从Visual Studio调试或从PostMan BUT调用时,如果我部署到Ubuntu,尽管我可以尽快访问该站点的首页和下一页(均为GET)当我在第二页(只是一个字段)上发布表单时,它从浏览器和邮递员失败了400但没有细节。除了Web服务器启动之外,Ubuntu没有记录任何其他内容,尽管之前已记录错误,因此日志记录正在运行。

我甚至在行动上尝试了IgnoreAntiforgeryToken,但这没有帮助。

相关配置:

public void ConfigureServices(IServiceCollection services)
{
    if (Configuration.GetValue<bool>("useFileSystem"))
    {
        services.AddDataProtection()
            .PersistKeysToFileSystem(new DirectoryInfo(Configuration.GetValue<string>("fileSystemPersistPath")))
            .SetApplicationName("Perftest2018");
    }
    else
    {
        services.AddDataProtection()
            .SetApplicationName("Perftest2018");
    }

    services.AddMvc();
    services.AddDistributedMemoryCache();
    services.AddSession(options =>
    {
        options.IdleTimeout = TimeSpan.FromSeconds(30);
        options.Cookie.HttpOnly = true;
    });

    services.Configure<IISOptions>(options =>
    {
        options.AutomaticAuthentication = false;
    });

    //<snip> the rest of my services
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseDeveloperExceptionPage();
    app.UseStaticFiles();
    app.UseSession();

    app.UseForwardedHeaders(new ForwardedHeadersOptions
    {
        ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
    });

    app.UseMvc(routes =>
    {
        routes.MapRoute(name: "default",template: "{controller=Home}/{action=Index}/{id?}");
    });
}

行动是这样的:

[HttpPost]
public async Task<IActionResult> Authorize(AuthorizeViewModel model)
{
    // The view model just has a single string property with no other attributes
}

1 个答案:

答案 0 :(得分:0)

这是由代理中的其他nginx标头引起的,这些标头是从使用TLS运行的另一台服务器中获取的。标题Upgrade $http_upgradeConnection "upgrade"可能不允许POST!