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);
返回响应;
}
}
我有类似的创建和删除请求的方法,分别调用JsonServiceClientPost
和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处于。由于HTTPGET
和DELETE
请求没有请求正文,因此不会按预期添加任何内容类型
。您可能会查找Accept
标头,该标头指示客户端希望响应正文采用的格式,而在ServiceStack的JsonServiceClient
中始终是apapplication/json
。非常好的建议,谢谢你们。斯科特,你们说得对。如果没有明确指定,我调用的服务似乎不会起作用(考虑到我看到的其他问题,这并不奇怪)。总之,您的底层代码块成功了-谢谢。