我有一个来自 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 XHRdata
属性),这意味着服务器没有办法获取客户端发送的消息。
我读对了吗?JS客户端的delete坏了吗?