ServiceStack:通过POST发送JSON字符串,而不是DTO

我想发送一个字符串(JSON格式)到我的web服务,而不是使用DTO。

var client = new JsonServiceClient(absoluteUrl);
client.Post<T>(absoluteUrl, data); 

但是,在将数据(DTO对象)更改为JSON字符串之后,出现ServiceStack异常:内部服务器错误。 看起来像ServiceStack Post / Send方法更改我的JSON请求。

有没有可能或有什么办法避免它? 其他人有同样的问题?

更新1:由于OAuth身份验证,我正在使用此方法。 我正在通过请求生成一个HMAC。

谢谢。


您可以使用HTTP Utils发送原始JSON,例如:

var response = absoluteUrl.PostJsonToUrl(data)
    .FromJson<T>();

ServiceStack的.NET服务客户端提供了Typed API来发送Typed Request DTO,它并不意味着POST'ing原始字符串,但我刚刚添加了在此提交中发送原始stringbyte[]Stream ,现在您可以发送原始数据有:

var requestPath = request.ToPostUrl();

string json = request.ToJson();
var response = client.Post<GetCustomerResponse>(requestPath, json);

byte[] bytes = json.ToUtf8Bytes();
response = client.Post<GetCustomerResponse>(requestPath, bytes);

Stream ms = new MemoryStream(bytes);
response = client.Post<GetCustomerResponse>(requestPath, ms);

此更改可从v4.0.43 +获得,现已在MyGet上提供。

与HttpWebRequest共享Cookie

有不同的HttpWebRequests共享相同的“会话”你只需要使用身份验证后,共享客户饼干,例如JsonServiceClient通过赋予它您可以与HTTP utils的饼干CookieContainer ,如:

var response = absoluteUrl.PostJsonToUrl(data,
     requestFilter: req => req.CookieContainer = client.CookieContainer)
    .FromJson<T>();
链接地址: http://www.djcxy.com/p/68715.html

上一篇: ServiceStack: Send JSON string instead DTO via POST

下一篇: Extra quotes in ServiceStack POST