servicestack,C#,Json,Rest,servicestack" /> servicestack,C#,Json,Rest,servicestack" />

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

C# 是否可能或有必要设置ServiceStack客户端删除请求的内容类型?,c#,json,rest,servicestack,C#,Json,Rest,servicestack,我有以下代码 public T SendUpdateRequest(string url) { using (JsonServiceClient client = new JsonServiceClient()) { T response = client.Put<T>(url); return response; } } public T SendUpdateRequest(字符串url) { 使用(JsonServiceC

我有以下代码

public T SendUpdateRequest(string url)
{
    using (JsonServiceClient client = new JsonServiceClient())
    {
        T response = client.Put<T>(url);
        return response;
    }
}
public T SendUpdateRequest(字符串url)
{
使用(JsonServiceClient=new JsonServiceClient())
{
T response=client.Put(url);
返回响应;
}
}
我有类似的创建和删除请求的方法,分别调用JsonServiceClient
Post
delete
方法

调用my update或create方法时,对外部API的调用工作正常。删除不会删除。我可以看到,如果我通过向API发出请求,API的delete方法确实可以工作

当我在Fiddler中将我的非工作删除与工作删除的请求/响应进行比较时,我可以看到主要的区别是我的请求没有将
内容类型设置为
应用程序/json
(所有这些方法都返回json)


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

ServiceStack客户端不会在没有请求主体的请求上设置
内容类型
头,因为
内容类型
仅适用于正文,因此是多余的

这将在准备客户端请求的代码中显示

if(httpMethod.HasRequestBody())
{
client.ContentType=ContentType;
...
正确实现的RESTful服务应该满足
DELETE
请求,而不在没有正文的地方指定
content-type

DELETE /User/123 HTTP/1.1
如果在未指定此类型的情况下,您正在调用的服务对您的请求不满意(这是不寻常的),则您可以使用此筛选器手动强制发送该类型:

var-client=新的JsonServiceClient(“https://service/");
client.RequestFilter+=(httpReq)=>{
//强制在所有请求上发送内容类型
httpReq.ContentType=“应用程序/json”;
};

我希望这会有所帮助。

作为补充说明。使用新的JsonServiceClient()时要小心
对于每个请求,因为客户端是cookie的容器,因此如果您在一个客户端中接收到会话cookie,它将不可用于其他实例。最好创建一个客户端实例,并在请求之间共享它。
内容类型
HTTP标头用于标识HTTP请求的格式ODY处于。由于HTTP
GET
DELETE
请求没有请求正文,因此不会按预期添加任何
内容类型
。您可能会查找
Accept
标头,该标头指示客户端希望响应正文采用的格式,而在ServiceStack的
JsonServiceClient
中始终是
apapplication/json
。非常好的建议,谢谢你们。斯科特,你们说得对。如果没有明确指定,我调用的服务似乎不会起作用(考虑到我看到的其他问题,这并不奇怪)。总之,您的底层代码块成功了-谢谢。