我一直在使用服务堆栈,并遇到了一种情况,即POST方法使用IReturn对象的默认实例(所有属性默认为其数据类型值)。作为Route(/ product / 1234345 /)的一部分提供的值是唯一填充的值。我在下面列举了一个例子:
[Route("/search/{searchMethod}/books")]
public class SearchRequest : IReturn<SearchResponse>
{
public SearchProvider searchProvider { get; set; }
public string searchTerm { get; set; }
public string categoryID { get; set; }
public long maxResults { get; set; }
//Only this property gets populated if method is post
public string searchMethod { get; set; }
}
public SearchResponse Any(SearchRequest searchRequest)
{
//This works only for non-post requests
return Put(searchRequest);
}
public SearchResponse Get(SearchRequest searchRequest)
{
//This works
return Put(searchRequest);
}
public SearchResponse Post(SearchRequest searchRequest)
{
//This does not
return Put(searchRequest);
}
public SearchResponse Put(SearchRequest searchRequest)
{
//Code for put method goes here
}
然后我使用客户端调用这些方法
SearchServiceClient searchClient = new SearchServiceClient(SearchServiceAPIUrl);
SearchResponse searchResponse = searchClient.Search(SearchProvider.SampleSearchProvider, searchterm, categoryID, 100,"conservative");
非常感谢任何帮助
由于
答案 0 :(得分:1)
我总是在构造函数中填充我的请求对象并将其发送到服务
searchClient.Post(new SearchRequest(SearchProvider.SampleSearchProvider,
searchterm, categoryID, 100,"conservative")):
答案 1 :(得分:1)
我在修补DTO后终于找到了解决方案。对于post请求,似乎所有DTO属性都需要具有[DataMember]属性以进行序列化/反序列化,并确保该类还具有[DataContract]属性。