是否可以或必须设置ServiceStack客户端删除请求的内容类型?

时间:2014-08-28 05:21:46

标签: c# json rest servicestack

我有以下代码。

public T SendUpdateRequest(string url)
{
    using (JsonServiceClient client = new JsonServiceClient())
    {
        T response = client.Put<T>(url);
        return response;
    }
}

我有类似的创建和删除请求方法,分别调用JsonServiceClient PostDelete方法。

调用我的更新或创建方法时,对外部API的调用工作正常。删除没有。我可以看到,如果我通过REST console向它发出请求,那么API的删除方法确实有效。

当我将我的非工作删除与Fiddler中的工作请求/响应进行比较时,我可以看到主要区别是我的请求未将content-type设置为application/json(所有这些方法都返回JSON )。

我的问题是,为了成功调用我的API方法,是否有可能(甚至有必要)将我的删除请求的content-type显式设置为application/json

1 个答案:

答案 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";
};

我希望有所帮助。