我创建了WebAPI服务。我在服务中有控制器,它看起来像:
public class MyController : ApiController
{
[HttpPost]
public ResponceTools.APIResponce UserLoggedIn(UserArgs args)
{
//doing something
}
}
,其中
public class UserArgs
{
public string UserID { get; set; }
}
我可以向UserLoggedIn方法发送请求,并使用curl:
给出足够的响应curl --data "UserID=7822f2b9-44f1-4e30-a9da-d26e277fa0ac" http://localhost:8081/UserLoggedIn"
现在我正在编写.net Core Web App,我想使用这项服务。
string requestStr = WebAPIURL + "/UserLoggedIn";
var content = new StringContent("UserID=" + userID.ToString(),
System.Text.Encoding.Unicode,
"application/xml");
var task = client.PostAsync(requestStr, content);
var str = await task.Result.Content.ReadAsStringAsync();
但方法args值为null。
我做错了什么?
P.S。我尝试在#34; Register"中的WebApi应用程序中激活XmlSerializer。方法。它没有帮助。
config.Formatters.XmlFormatter.UseXmlSerializer = true;
感谢您的帮助。
答案 0 :(得分:2)
不应将UserID作为字符串发送,而应将其作为对象发送,以使其与UserArgs的类定义匹配。
var user = { UserID: userID };
然后通过application / json的内容类型发送该对象,因为这是web api中的默认反序列化器。
var content = new StringContent(JsonConvert.SerializeObject(user), Encoding.UTF8, "application/json");
答案 1 :(得分:0)
更改内容类型
就足够了var content = new StringContent("UserID=" + userID.ToString(),
System.Text.Encoding.Unicode,
"application/x-www-form-urlencoded");
您发送的请求数据不是XML或JSON,因此这种内容类型是唯一合适的内容类型。 如果您想了解有关绑定的更多信息,可以查看此文章(https://andrewlock.net/model-binding-json-posts-in-asp-net-core/)