gpt4 book ai didi

c# - ServiceStack DELETE 请求是默认对象,POST 工作正常

转载 作者:太空狗 更新时间:2023-10-29 20:34:17 24 4
gpt4 key购买 nike

我有一个来自 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 source code 中发现了问题.它像处理 GET 一样处理 DELETE 并创建请求对象而不是请求体,就像它对 POST 所做的那样。

if (httpMethod == HttpMethods.Get || httpMethod == HttpMethods.Delete || httpMethod == HttpMethods.Options)
{
try
{
return KeyValueDataContractDeserializer.Instance.Parse(queryString, operationType);
}
}

这样做的问题是 ServiceStack JS client使用与 POST 相同的逻辑创建 DELETE 请求,方法是将您发送的数据填充到主体中(技术上是 jQuery XHR data prop),这意味着服务器无法获取消息客户端正在发送。

我没看错吗? JS客户端的delete是不是坏了?

最佳答案

我重写了 servicestack.js 客户端,在选项 var 初始化之前在 P.Send 函数中添加了以下行...

if (ajaxOptions.type === "DELETE") {
requestUrl = requestUrl + "?" + decodeURIComponent($.param(request[webMethod]));
}

关于c# - ServiceStack DELETE 请求是默认对象,POST 工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14762211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com