C# RestSharp不';我的类有DateTime字段,但我似乎没有序列化/desh
我在web api层和基于restsharp的客户端中使用了一个模型 它具有日期时间字段,如:C# RestSharp不';我的类有DateTime字段,但我似乎没有序列化/desh,c#,datetime,asp.net-web-api,restsharp,C#,Datetime,Asp.net Web Api,Restsharp,我在web api层和基于restsharp的客户端中使用了一个模型 它具有日期时间字段,如: public class User { public int Id {get;set;} public string Name {get;set;} public DateTime Created {get;set;} public DateTime Updated {get;set;} } 调试代码时,我可以看到以下情况: 我正确创建并初始化了我的类,我可以看到VS显
public class User
{
public int Id {get;set;}
public string Name {get;set;}
public DateTime Created {get;set;}
public DateTime Updated {get;set;}
}
调试代码时,我可以看到以下情况:
datetime.Now
之前重置了datetime字段,则会正确保存
更新
我的Restsharp客户端代码具有以下方法:
public Token SaveUser(User user)
{
var request = new RestRequest();
request.Resource = "Users/SaveUser";
request.Method = Method.POST;
request.AddObject(user);
return Execute<User>(request);
}
小提琴手
使用fiddler我的请求(使用AddObject)如下所示:
POST http://localhost:60525/api/Users/SaveUser HTTP/1.1
Accept: application/json, application/xml, text/json, text/x-json, text/javascript, text/xml
User-Agent: RestSharp/104.4.0.0
Content-Type: application/x-www-form-urlencoded
Host: localhost:60528
Content-Length: 292
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Id=0&Name=abc&Created=15%2F08%2F2014%2011%3A58%3A14%20AM&Updated=15%2F08%2F2014%2011%3A58%3A14%20AM
web api端日期返回空值的原因是什么?考虑使用
request.AddBody
而不是request.AddObject
将对象的每个属性添加为单独的参数。正文的编码方式类似于HTMLAddObject
提交的工作方式
将对象的内容序列化到请求主体AddBody
request.RequestFormat=DataFormat.Json代码>以明确要发送的格式
您可能还需要WebAPI控制器上的[FromBody]
属性:
public SaveUserResponse SaveUser([FromBody] User user)
顺便说一句,将控制器路由命名为“Users”而不是“SaveUser”会更“RESTful”。通过POST
ing发送给Users
控制器,这应该表示保存。您确定问题出在客户端吗?尝试使用Fiddler捕获服务器输出,或从浏览器调用API。验证数据确实是从API发送的。如果是,请发布更多关于如何从客户端调用api的代码。@MattJohnson与此同时,我已经发布了我的客户端和web api代码的外观。如果您使用AddBody
而不是AddObject
,是否有效?@MattJohnson当我使用AddBody时,在web api控制器级别,用户对象为空。请参阅下面的答案。不过,您应该检查以确保请求按预期生成。我添加了[FromBody],并且用户对象仍然为空。您是否在Fiddler中验证了请求?我仍然需要获得Fiddler,IT部门运作紧张,我需要批准!奇怪的是,当调用我的SaveUser(Execute方法)时,我在fiddler中看不到任何显示对localhost:60525(我的web api端点)的请求的内容,但我在调试器中跳转到端点,因此它被调用。为什么fiddler没有接收对web api的restsharp客户端调用?
public SaveUserResponse SaveUser([FromBody] User user)