【问题标题】:ASP.NET Core 5, HttpPut request with parameters from body always returns Http 400 Bad requestASP.NET Core 5,带有来自正文的参数的 HttpPut 请求始终返回 Http 400 错误请求
【发布时间】:2021-06-05 13:06:04
【问题描述】:

首先,这是我在这个网站上的第一篇文章。这也是我尝试发布到 Web 服务器的第一个应用程序。所以,如果有些事情不是那么清楚,或者不是他们应该的那样,请原谅我。

问题如下:当我向后端发送 PUT 请求时,总是收到“Http 400 Bad request”错误。当我将后端上传到 IIS 托管服务器时,出现了这个问题。当我在 localhost 上运行应用程序时,问题不会发生。

我创建了一个简单版本的 PUT 请求,如下所示:

  [HttpPut("{id:int}")]
  public ActionResult PutTest(int id, [FromBody]TestClass model)
  {
     return Ok(model.Prop1);          
  }

TestClass如下:

namespace WebApi.Models.Accounts
{
   public class TestClass
   {
      public string Prop1 { get; set; }
      public string Prop2 { get; set; }
   }
}

例如,当我在 https://localhost:5000 上运行此代码时,它运行良好。但是当我将后端部署到我的域时,比如说https://www.mySite.app,它总是返回一个错误的请求错误。

我已经尝试进一步简化代码。并注意到,当我只在下面的 PUT 操作中要求一个单一参数时,它工作正常。

  [HttpPut("{id:int}")]
  public ActionResult PutTest(int id)
  {
     return Ok(id);          
  }

我使用的web.config文件很简单,看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
   <location path="." inheritInChildApplications="false">
      <system.webServer>
         <handlers>
            <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
         </handlers>
         <aspNetCore processPath="dotnet" arguments=".\WebApi.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="InProcess">
            <handlerSettings>
               <handlerSetting name="debugLevel" value="file" />
               <handlerSetting name="debugFile" value=".\logs\aspnetcore-debug.log"/>
            </handlerSettings>
         </aspNetCore>
      </system.webServer>
   </location>
</configuration>

我正在使用 Postman 测试我的后端。我能够成功地向后端中的所有其他 Http 函数发送请求,但主体中带有参数的 PUT 请求除外。

我被困在这几天了,似乎找不到解决方案。所以任何帮助将不胜感激。顺便说一句,所有其他 Http 类都可以正常工作,POST、GET、DELETE 等等..

【问题讨论】:

  • 声明方法为[HttpPut] public ActionResult PutTest(TestClass model) { return Ok(model.Prop1); }
  • @viveknuna 我看不出这有什么帮助; OP 的设置非常正常,应该可以正常工作。一直使用 ID 作为路由的参数。无论如何,您能否解释一下为什么您的建议会解决问题,以及您认为是什么导致了问题?
  • 签出this post
  • @viveknuna 我试过这个解决方案,但它也给了我同样的错误响应。
  • @Alexander,还尝试编辑我的 web.config 文件,如您指出的帖子中所述。但也没有成功。我总是得到相同的 400 - bad request 错误代码。

标签: c# http asp.net-core iis


【解决方案1】:

您是否尝试过在失败时使用 Fiddler 或其他工具来检查原始请求/响应?除了上述 S. 10 Brinke 的建议之外,这也将有所帮助。

这些来自 Microsoft 的页面还可以帮助您排除故障并捕获 IIS 日志 https://docs.microsoft.com/en-us/iis/troubleshoot/diagnosing-http-errors/troubleshooting-http-400-errors-in-iis https://docs.microsoft.com/en-US/troubleshoot/aspnet/error-logging-http-apis

【讨论】:

  • 这个我还没研究,我试试看。
【解决方案2】:

我使用您的代码进行测试,但没有发现问题。建议你用FRT看看是哪个模块有问题。

您可以使用FRT捕获400错误然后查看详细日志,有关FRT的更多信息,您可以参考这个link

【讨论】:

  • 感谢您的回答。我的网站由一家外部公司托管。我只能在服务器上上传/编辑文件。所以我无法通过 FRT 捕获服务器端的错误。
  • 你可以尝试在本地IIS部署项目,看看是否出现这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-22
  • 2013-12-25
  • 2015-07-17
  • 1970-01-01
相关资源
最近更新 更多