gpt4 book ai didi

xamarin.ios - Monotouch/iPhone - 当 HTTP 方法为 DELETE 时,调用 HttpWebRequest.GetRequestStream() 连接到服务器

转载 作者:行者123 更新时间:2023-12-03 07:45:16 24 4
gpt4 key购买 nike

我的场景:我正在使用 iOS 版 Monotouch 创建 iPhone 应用程序。我正在调用基于 ASP.NEt MVC 4 Web API 的 http 服务来登录/注销。对于登录,我使用 POST Web 方法,一切顺利。对于注销,我正在调用删除 Web 方法。我想将 JSON 数据(序列化的复杂数据)传递给删除调用。如果我将简单的数据(例如单个字符串参数)作为 URL 本身的一部分传递,那么一切都很好,即删除确实有效!为了传递复杂的 Json 数据,这是我的调用(我调整了代码以使其简单,仅显示一个参数 - 通过 JSON 发送的用户名):

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://localhost/module/api/session/");
req.ContentType = "application/json";
req.CookieContainer = jar;
req.Method = "Delete";
using (var streamWrite = new StreamWriter(req.GetRequestStream()))
{
string jSON = "{\"UserName\":\"" + "someone" + "\"}";
streamWrite.Write(jSON);
streamWrite.Close();
}
HttpWebResponse res = (HttpWebResponse)req.GetResponse();

在服务器上,Delete 方法看起来具有以下定义:

public void Delete(Credentials user)

其中 Credentials 是复杂类型。

现在,问题来了!

上面的代码,一旦命中就进入服务器上的Delete方法:

req.GetRequestStream()

因此发送到Delete方法的参数最终为空

这是奇怪的部分:如果我使用测试 VS 2010 Windows 应用程序使用完全相同的代码,即使上面的代码也有效......即它不会调用删除,直到调用 req.GetResponse() !在这种情况下,Delete 方法的参数是一个有效的对象!

问题

有什么想法或者这是 Monotouch 的错误吗?如果是,有什么解决方法吗?

注意:

如果我将删除定义更改为 public void Delete(string userName)如果我将参数作为 url 本身的一部分传递,而不是 json,那么一切都很好。但就像我说的,这只是一个简单的例子来说明我的问题。如有任何帮助,我们将不胜感激!!!

最佳答案

这似乎是不明确的。有关更多详细信息,请参阅此问题:Is an entity body allowed for an HTTP DELETE request?

一般来说,MonoTouch(基于 Mono)将尝试与 Microsoft .NET 框架兼容功能/错误,以简化平台之间的代码可移植性。

如果 MS.NET 忽略 DELETE 方法的主体,那么 MonoTouch 也会如此。如果行为不同,则应在 http://bugzilla.xamarin.com 填写错误报告。

关于xamarin.ios - Monotouch/iPhone - 当 HTTP 方法为 DELETE 时,调用 HttpWebRequest.GetRequestStream() 连接到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11785597/

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