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

下一篇: LLVM Pass segfaults on getAnalysis<DominatorTree>()