2014-02-14 145 views
1

我正在测试用ASP.NET Web API编写RESTful API。我在客户端上使用RestSharp来模拟不同的调用。Rest Rest API调用ASP.NET Web API

我想提交一个应用程序ID查询字符串,并且正文应该是一个类型为“Log”的集合。每次,由服务器接收的正文发布的应用程序ID get始终为NULL。

代码在服务器上:

public class LogsController : ApiController 
{ 
    public HttpStatusCode Post(Guid ID, [FromBody] List<Log> logs) 
    { 
     if (logs != null) 
      return HttpStatusCode.OK; 
     else 
      return HttpStatusCode.PreconditionFailed; 
    } 
} 

public class Log 
{ 
    public Guid ErrorId { get; set; } 
} 

在客户端代码:

static void Main(string[] args) 
    { 
     var client = new RestClient("http://localhost:36146/api"); 

     var json = JsonConvert.SerializeObject(new List<Log>() 
      { 
       new Log { ErrorId = Guid.NewGuid()} 
      }); 

     var request = new RestRequest("Logs", Method.POST); 

     request.RequestFormat = DataFormat.Json; 
     request.AddParameter("ID", Guid.NewGuid(), ParameterType.QueryString); 
     request.AddHeader("Accept", "application/json"); 
     request.AddHeader("Content-Type", "application/json; charset=utf-8"); 
     request.AddBody(json); 

     IRestResponse response = client.Execute(request); 
     Console.WriteLine(response.Content); 
     Console.Read(); 
    } 

    public class Log 
    { 
     public Guid ErrorId { get; set; } 
    } 

我想我得到了这个工作,但是不管是什么我现在做的“日志”参数在服务器上始终为NULL。

+0

保罗 - 它很好的知道你找到了解决方案,这里是一个链接:http://www.codeproject.com/Articles/826359/Consuming-ASP-NET-WEB-API-using-ASP-NET-MVC描述RestSharp用法的 - 和 - Re可能会有所帮助。 –

回答

1

我想我找到了问题。

RestSharp在填充请求的主体时隐式使用JsonSerializer。因为我也被称为序列化程序,我认为它导致格式问题。

我已经将该调用移除到序列化程序,现在我正从服务器接收一个200。

快乐的日子。

+0

你可以使用这个库切换到使用Json.NET - https://www.nuget.org/packages/RestSharp.Newtonsoft.Json – Adam