c#POST api大惊小怪

时间:2018-08-14 10:20:37

标签: c# rest asp.net-core .net-core

我正在构建一个Web Api,以便将我的公司错误报告分类到服务器上,而我正在处理的发布请求遇到了麻烦。

当我为客户端编码时,他们应该发送格式如下的错误报告

public partial class JitCollect {
    public DateTime? Timestamp { get; set; }
    public string Jit { get; set; }
    public int? ProjectId{ get; set; }
}

,否则他们可能会发送带有状态报告的字符串,例如“ OK”或其他。我的主要问题是,如果我以"application/x-www-form-urlencoded"的形式发送错误报告,并像在网上看到的那样在身体前添加“ =”,则会丢失NewtonSoft期望的另一种DateTime格式:

"2018-08-14T08:50:17.5608444+02:00"之前 在"2018-08-14T08:50:17.5608444 02:00"

之后

我可以用硬编码将“ +”放回去,但这是重点,我对如何正确完成我想做的事情很感兴趣。

如果我改为尝试将数据发送为“ application / json”,即使指定了from主体属性和对象类型,我总是在另一侧获得空数据(这对我来说并不理想,因为我希望能够也可以发送纯字符串)

[HttpPost]
public string Post([FromBody] List < JitCollect > jsonPost)

你知道什么是最好的方法吗?这是我尝试使用的众多发布功能之一

public static void postRequest(string data, string address) {
    using (var client = new HttpClient()) {
        client.BaseAddress = new Uri(address);

        data = $"={data}";
        //client.DefaultRequestHeaders.Add("token", token);

        var buffer = System.Text.Encoding.UTF8.GetBytes(data);
        var byteContent = new ByteArrayContent(buffer);

        byteContent.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
        //byteContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

        var result = client.PostAsync("", byteContent).Result;
        string resultContent = result.Content.ReadAsStringAsync().Result;
   }
}

1 个答案:

答案 0 :(得分:0)

我使用asp.net核心Web API进行了测试,它正确通过了datetime。

  1. 控制器

        [HttpPost]
    public object Post([FromBody]List<JitCollect> jsonPost)
    {
        var resul = jsonPost.FirstOrDefault().Timestamp.Value.ToString("yyyy’-‘MM’-‘dd’T’HH’:’mm’:’ss.fffffffK");
        return new List<JitCollect>() {
            new JitCollect{ ProjectId = 1, Jit = "J1", Timestamp = DateTime.Now }
        };
    }
    
  2. 邮递员的请求
    enter image description here

  3. 来自控制器的结果

enter image description here