是否可能或有必要设置ServiceStack客户端删除请求的内容类型

本文关键字:请求 删除 客户端 类型 ServiceStack 设置 是否 | 更新日期: 2023-09-27 18:19:48

我有以下代码。

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

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

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

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

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

是否可能或有必要设置ServiceStack客户端删除请求的内容类型

ServiceStack客户端不会在没有请求主体的请求上设置content-type标头,因为content-type仅适用于主体,因此是多余的。

这可以在准备客户端请求的代码中看到。

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

我希望这能有所帮助。