ServiceStack DELETE请求是默认对象,POST工作正常
我有一个来自Javascript客户端的DTO。 当我尝试使用deleteFromService
发送时,请求对象是空的(看起来像是刚刚新建的)。 如果我将方法更改为postToService
,请求对象正确填充。
我正在使用3.9 API。 我在这里不知所措。
服务:
public object Post(Order request)
{
return _orderRepository.InsertOrder(request);
}
public object Delete(Order request)
{
_orderRepository.DeleteOrder(request.Uuid);
return true;
}
JS:
//Fails
serviceClient.deleteFromService("order", order, function () { }, deleteFailed);
//Works
serviceClient.postToService("order", order, function () { }, deleteFailed);
更新:
我在ServiceStack源代码中发现了这个问题。 它将DELETE像GET一样对待,并创建请求对象而不是正文,就像它为POST一样。
if (httpMethod == HttpMethods.Get || httpMethod == HttpMethods.Delete || httpMethod == HttpMethods.Options)
{
try
{
return KeyValueDataContractDeserializer.Instance.Parse(queryString, operationType);
}
}
这样做的问题在于ServiceStack JS客户端使用与POST相同的逻辑创建DELETE请求,方法是将发送给主体的数据(技术上讲是jQuery XHR data
道具)填充,这意味着没有办法服务器来获取客户端发送的消息。
我正在读这个吗? JS客户端的删除是否被破坏?
我重写了servicestack.js
客户端在选项var初始化之前在P.Send
函数中添加以下行...
if (ajaxOptions.type === "DELETE") {
requestUrl = requestUrl + "?" + decodeURIComponent($.param(request[webMethod]));
}
DELETE
消息不应携带消息体,这意味着只允许将参数传递给URL中的DELETE请求(即,与要删除的对象的ID一样)。 因此,除了ServiceStack所做的之外,您绝对不应该在DELETE请求中发送DTO。
看到这个相关的问题:实体主体是否允许HTTP DELETE请求?
链接地址: http://www.djcxy.com/p/11781.html上一篇: ServiceStack DELETE request is default object, POST works fine