是否可能或有必要设置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 Post
和Delete
方法。
当调用我的更新或创建方法时,对外部API的调用工作正常。Delete没有。我可以看到,如果我通过REST控制台向API发出请求,那么它的delete方法确实有效。
当我在Fiddler中比较我的非工作删除和工作的请求/响应时,我可以看到主要的区别是我的请求没有将content-type
设置为application/json
(所有这些方法都返回JSON)。
我的问题是,是否有可能(甚至有必要)将我的删除请求的content-type
显式设置为application/json
,以便成功调用我的API方法?
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";
};
我希望这能有所帮助。