加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何使用HttpClient将JSON数据发布到Web API

发布时间:2020-12-15 23:48:19 所属栏目:百科 来源:网络整理
导读:我有以下代码,基本上它接受一个动态对象(在这种情况下是类型文件)并使用HTTPClient类尝试POST到WebAPI控制器,我遇到的问题是控制器始终为NULL获取我的[FromBody]参数的值. 码 var obj = new { f = new File { Description = description,File64 = Convert.To
我有以下代码,基本上它接受一个动态对象(在这种情况下是类型文件)并使用HTTPClient类尝试POST到WebAPI控制器,我遇到的问题是控制器始终为NULL获取我的[FromBody]参数的值.

var obj = new
        {
            f = new File
            {
                Description = description,File64 = Convert.ToBase64String(fileContent),FileName = fileName,VersionName = versionName,MimeType = mimeType
            },}

var client = new HttpClient(signingHandler)
{
   BaseAddress = new Uri(baseURL + path) //In this case v1/document/checkin/12345
};

client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));                        

HttpResponseMessage response;
action = Uri.EscapeUriString(action);

//Obj is passed into this,currently it is of type File 
var content = new StringContent(JsonConvert.SerializeObject(obj).ToString(),Encoding.UTF8,"application/json");

response = client.PostAsync(action,content)).Result;
if (response.IsSuccessStatusCode)
{     
    var responseContent = response.Content;                
    string responseString = responseContent.ReadAsStringAsync().Result;
    return JsonConvert.DeserializeObject<T>(responseString);
}

调节器

[HttpPost]
[Route("v1/document/checkin/{id:int}")]
public void Checkin_V1(int id,[FromBody] File f)
{
        //DO STUFF - f has null on all of its properties
}

模型

public class File
{
    public string FileName { get; set; }
    public string VersionName { get; set; }
    public string Description { get; set; }
    public string MimeType { get; set; }
    public byte[] Bytes { get; set;}
    public string File64 { get; set; }
}

该模型在WebAPI和客户端应用程序上共享.

任何关于为什么失败的帮助都会非常感激,现在已经在圈子里走了一段时间.

解决方法

不需要你在开始时的obj.那就是将f嵌套在另一个对象中.

var obj = new
    {
        f = new File
        {
            Description = description,MimeType = mimeType
        },}

改成

var f = new File
{
    Description = description,MimeType = mimeType
};

然后只序列化f.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读