ASP.Net Core 3.1 - Web API 中的 Post 参数始终为 NULL

Posted

技术标签:

【中文标题】ASP.Net Core 3.1 - Web API 中的 Post 参数始终为 NULL【英文标题】:ASP.Net Core 3.1 - Post parameter is always NULL in Web API 【发布时间】:2021-01-26 20:30:42 【问题描述】:

我正在尝试在 ASP.Net Core 3.1 中创建一个基本的 API 服务。

在去问题描述之前,我已经把这些问题都看完了-

Post parameter is always null Asp.net Core Post parameter is always null ASP.NET Core API POST parameter is always null Web Api Parameter always null web-api POST body object always null

但是,没有解决我的问题。

我要做的是创建一个基本 API,它将从 API 中获取 string,然后使用 string 并根据字符串给出响应。我在Controller-

中做的是这样的
[Route("/")]
[ApiController]
[EnableCors]
public class XmlValidatorController : ControllerBase

    ........................
    ........................

[HttpPost("verify_string")]
public ActionResult<ICollection<Certificate>> VerifyXmlString([FromQuery(Name = "xml")] string xml)
//string xml                                => Giving Null
//[FromQuery(Name = "xml")] string xml      => Giving Null
//[FromBody] string xml                     => Unsupported Media Type - 415
//[FromBody] dynamic xml                    => Unsupported Media Type - 415
//HttpRequestMessage msg                    => Unsupported Media Type - 415

    ...............
    ...............

如果我从POST Man 创建一个POST 请求,我会这样创建-

在我的控制器中,如果我放置一个调试指针,我会得到这个-

所以,我总是在POST 请求中收到null

如果我在函数参数中使用其他参数,我会收到此错误-

字符串 xml => 给空 [FromQuery(Name = "xml")] 字符串 xml => 给空 [FromQuery(Name = "xml")] 字符串 xml => 给空 [FromBody] 字符串 xml => 不支持的媒体类型 - 415 [FromBody] 动态 xml => 不支持的媒体类型 - 415 HttpRequestMessage 消息 => 不支持的媒体类型 - 415

谁能帮我从控制器动作参数/函数参数(XML)中找到参数字符串。

重新-

我还没有尝试为请求创建模型,因为我认为这会使代码变得更复杂一些,而且因为我只需要一个字符串而变得矫枉过正。

重新重新-

我的Startup.cs文件没有特殊配置,是代码创建时提供的默认代码。该文件的代码可以在here 中找到。控制器代码见here。

完整的代码库可以在 this Github Repo 中找到。

提前感谢您的帮助。

【问题讨论】:

你为什么要做FromQuery而不是在FromBody中发送? 还尝试在邮递员中作为 Raw 发送,这是您尚未列出的排列 尝试作为 Json 有效负载发送并使其成功。 是的,FromBody 需要 json 有效负载,而不是格式编码,正如@jbooker 提到的那样。 那么,我需要在邮递员中更改请求吗? 【参考方案1】:

您已经为您的参数定义了FromQuery 属性。实际上,当您发布x-www-form-urlencoded 表单时,指定了某种内容类型,它告诉模型绑定系统所有查询参数实际上都是表单字段。所以你必须为xml参数定义FromForm属性,

[HttpPost("verify_string")]
public ActionResult<ICollection<Certificate>> VerifyXmlString([FromForm] string xml)

使用邮递员中的“参数”选项卡将其作为查询参数传递。

【讨论】:

【参考方案2】:

您在 Postman 中指定 Content-Type: application/json,但您的有效负载不是 JSON。因此出现“不支持的媒体类型”错误。

Content-Type 更改为text/xmlapplication/xml,然后重试。

【讨论】:

朋友请仔细阅读问题。我已尝试使用您的解决方案和不支持的媒体类型 - 415 您的问题中哪里说您更改了内容类型?【参考方案3】:

为了填充 [FromQuery] 参数,您必须从 URL 提供它,在您的情况下,它可能类似于:

[POST] https://localhost:44377/verify_string?xml=asd

【讨论】:

以上是关于ASP.Net Core 3.1 - Web API 中的 Post 参数始终为 NULL的主要内容,如果未能解决你的问题,请参考以下文章

ASP.Net Core 3.1 - Web API 中的 Post 参数始终为 NULL

ASP.NET Core--.net core 3.1 部署到 IIS

ASP.NET Core 3.1 / 5 WeatherForecast 示例 Web API 项目引发错误 404

我应该如何保护我的 Web 应用程序(ASP.Net Core 3.1 MVC)?

在测试 ASP.Net Core 3.1 Web Api 期间跳过 JWT Auth

发布到 ASP.NET Core 3.1 Web 应用程序时,“[FromBody]MyClass 数据”通常为空