我正在构建一个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;
}
}
答案 0 :(得分:0)
我使用asp.net核心Web API进行了测试,它正确通过了datetime。
控制器
[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 }
};
}
来自控制器的结果