将.net Core App的发布请求发送到Web API

时间:2017-04-18 04:18:48

标签: .net asp.net-web-api asp.net-core

我创建了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;

感谢您的帮助。

2 个答案:

答案 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/