我有以下代码。
public T SendUpdateRequest(string url)
{
using (JsonServiceClient client = new JsonServiceClient())
{
T response = client.Put<T>(url);
return response;
}
}
我有类似的创建和删除请求方法,分别调用JsonServiceClient Post
和Delete
方法。
调用我的更新或创建方法时,对外部API的调用工作正常。删除没有。我可以看到,如果我通过REST console向它发出请求,那么API的删除方法确实有效。
当我将我的非工作删除与Fiddler中的工作请求/响应进行比较时,我可以看到主要区别是我的请求未将content-type
设置为application/json
(所有这些方法都返回JSON )。
我的问题是,为了成功调用我的API方法,是否有可能(甚至有必要)将我的删除请求的content-type
显式设置为application/json
?
答案 0 :(得分:3)
ServiceStack客户端不会在没有请求正文的请求中设置content-type
标头,因为content-type
仅适用于正文,因此是多余的。
准备客户端请求的代码中的can be seen here。
if (httpMethod.HasRequestBody())
{
client.ContentType = ContentType;
...
正确实施的RESTful服务应该对DELETE
请求感到满意,在没有正文的情况下指定content-type
。
DELETE /User/123 HTTP/1.1
如果您所呼叫的服务对您的请求不满意,但未指定此类型(这是不寻常的),那么您可以使用此过滤器手动强制发送该类型:
var client = new JsonServiceClient("https://service/");
client.RequestFilter += (httpReq) => {
// Force content type to be sent on all requests
httpReq.ContentType = "application/json";
};
我希望有所帮助。