如何在控制器中检索 POST 数据
Posted
技术标签:
【中文标题】如何在控制器中检索 POST 数据【英文标题】:How to retrieve POST data in Controller 【发布时间】:2019-01-28 15:29:50 【问题描述】:我正在尝试将POST
的值设置为ASP NET Core Controller
。
Controller
不断获得 null
值,我不明白为什么。
发送请求
string uri = "/api/create";
//some POCO--not important
CampaignRequest<CreateCampaignParams> req = new
CampaignRequest<CreateCampaignParams> Data = campaignParams, Ticket = this.ticket ;
var content = new StringContent(JsonConvert.SerializeObject(req), Encoding.UTF8, "application/json");
var response = await this.http.PostAsync(uri, content);
接收者
[HttpPost]
[Route("api/create")]
public async Task<long> CreateAsync([FromBody]CampaignRequest<CreateCampaignParams>pars)
//--- the received argument is null...i have tried putting as a string argument to no avail
try
var client = new CampaignClient(uri,pars.Ticket.Value);
long rez=await client.CreateCampaignAsync(pars.Data);
return rez;
catch (Exception)
return 0;
我试过将Controller
方法的参数设置为字符串,然后反序列化,字符串还是空的。
如何在控制器中检索StringContent
?
【问题讨论】:
【参考方案1】:最可能的原因是模型绑定错误。
要检查这一点,请修改您的控制器方法,如下所示:
[HttpPost]
[Route("api/create")]
public async Task<long> CreateAsync([FromBody]CampaignRequest<CreateCampaignParams> pars)
var errorCount = ModelState.ErrorCount;
并在 errorCount 行设置断点,如果计数 > 0,则进一步检查 ModelState 对象是否存在特定错误。
另外,您确定您的 POST 请求使用 F12 浏览器工具将您的对象正确添加到正文中。如果不确定,请附上截图。
【讨论】:
确实有一个错误。Ticket
只是string
的包装,ValidationState
无效。以上是关于如何在控制器中检索 POST 数据的主要内容,如果未能解决你的问题,请参考以下文章
如何检索 HTML POST 数据以在 ASP.NET WebForms 中进行操作?