POST方法无法在ServiceStack中填充请求对象

时间:2015-04-22 01:08:31

标签: asp.net servicestack

我一直在使用服务堆栈,并遇到了一种情况,即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");

非常感谢任何帮助

由于

2 个答案:

答案 0 :(得分:1)

我总是在构造函数中填充我的请求对象并将其发送到服务

    searchClient.Post(new SearchRequest(SearchProvider.SampleSearchProvider, 
                                       searchterm, categoryID, 100,"conservative")):

答案 1 :(得分:1)

我在修补DTO后终于找到了解决方案。对于post请求,似乎所有DTO属性都需要具有[DataMember]属性以进行序列化/反序列化,并确保该类还具有[DataContract]属性。