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/xml
或application/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)?