【问题标题】:c# POST api fuss时间:2019-04-01 标签:c#postapifuss
【发布时间】:2018-08-14 10:20:36
【问题描述】:

我正在构建一个 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 body 属性和对象类型,我总是会在另一端得到空数据(这对我来说并不理想,因为我希望能够也可以发送纯字符串)

[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;
   }
}

【问题讨论】:

  • 我喜欢将日期转换为某种整数,最好是纪元。人类可读的日期格式不应该成为计算机的负担 :)
  • data的值是多少?
  • 我丢失了 NewtonSoft 期望的 DateTime 格式是什么意思?分享我们相关的代码或步骤。尝试使用邮递员发送请求,会出现这个问题吗?

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


【解决方案1】:

我用 asp.net core web api 做了一个测试,它正确地传递了日期时间。

  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. 来自邮递员的请求

  3. 来自控制器的结果

【讨论】:

    猜你喜欢
    • 2020-05-07
    • 2016-10-23
    • 2011-01-31
    • 2013-04-11
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多