【问题标题】:Send post request from .net Core App to Web API从 .net Core App 向 Web API 发送 post 请求
【发布时间】:2017-04-18 04:18:48
【问题描述】:

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

我做错了什么?

附:我试图在我的 WebApi 应用程序中以“注册”方法激活 XmlSerializer。它没有帮助。

config.Formatters.XmlFormatter.UseXmlSerializer = true;

感谢您的帮助。

【问题讨论】:

  • var task = client.PostAsync(requestStr + "?UserId="+userID.tostring, content); // 不知道这样行不行
  • 您的内容类型是 xml,但您没有发送 xml。

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


【解决方案1】:

不应将 UserID 作为字符串发送,而应将其作为对象发送以使其与 UserArgs 的类定义匹配。

var user = { UserID: userID };

然后通过 application/json 的内容类型发送该对象,因为这是 web api 中的默认反序列化器。

var content = new StringContent(JsonConvert.SerializeObject(user), Encoding.UTF8, "application/json");

【讨论】:

  • 谢谢,我不知道 JSON 是 Web API 的默认序列化器。
【解决方案2】:

更改内容类型必须足够

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/

【讨论】:

    猜你喜欢
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2015-01-26
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    相关资源
    最近更新 更多