c# - WebApi HttpPost 未从 HttpClient 接收发布的内容
问题描述
Web API:我也尝试在字符串 stringcontent 之前使用 [FormBody] 和 [FromForm]。
// POST api/<MAUserController>
[HttpPost("AuthenticateUser")]
public async Task<ActionResult<MAUser>> PostAsync(string stringcontent)
{
//stringcontent is null
}
客户代码:
List<KeyValuePair<string, string>> postParameters = new List<KeyValuePair<string, string>>();
postParameters.Add(new KeyValuePair<string, string>("Email", Email));
postParameters.Add(new KeyValuePair<string, string>("Password", Password));
var jsonString = JsonConvert.SerializeObject(postParameters);
var stringContent = new StringContent(jsonString, Encoding.UTF8, "application/json");
using (var httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenString);
//httpClient.DefaultRequestHeaders.Add("Email", Email);
//httpClient.DefaultRequestHeaders.Add("Password", Password);
using (var response = await httpClient.PostAsync(API_URL, stringContent))
{
if (response.IsSuccessStatusCode)
{
//Success code
}
else
{
//Handle unsuccessful here
}
}
解决方案
您正在从客户端以 JSON 格式发布结构化数据。那么为什么 API 只是试图接受一个纯字符串呢?这没有多大意义。
相反,您应该让它接受具有正确结构的模型对象。ASP.NET 将负责将 JSON 属性绑定到模型属性。但是,您还应该简化postParameters
客户端中的 - 您使结构过于复杂。
例如
客户:
var postParameters = new { Email = "abc@example.com", Password = "xyz" };
服务器:
public async Task<ActionResult<MAUser>> PostAsync([FromBody] UserCredentials credentials)
{
}
UserCredentials
像这样的 DTO 类在哪里:
public class UserCredentials
{
public string Email { get; set; }
public string Password { get; set; }
}
推荐阅读
- java - 在订阅方法之前结束方面调用
- r - 拆分R中不同列中的值
- python - Python Selenium - 在页面上找不到元素
- c++ - 如何跳过/忽略cin输入
- c++ - 使用给定值初始化二维字符数组
- python - SphinxDirective 访问 config._raw_config 数据
- amazon-web-services - 警告:无法访问身份文件 InstanceLaunch.pem:没有这样的文件或目录
- ruby-on-rails - 从 Rails 4.1.16 升级到 4.2.0 时的 Postgres 问题
- javascript - 使用 ContentEditable 复制和粘贴表格
- node.js - FormData append 正在删除 String qouts angular