我的情景: 我使用MonoTouch的爲iOS打造的iPhone應用程序。我正在調用ASP.NEt MVC 4基於Web API的http服務來登錄/註銷。對於登錄,我使用POST webmethod和一切都很好。對於註銷,我打電話給刪除網絡方法。我想將JSON數據(序列化的複雜數據)傳遞給Delete調用。如果我將簡單的數據(比如單個字符串參數)作爲URL本身的一部分傳遞,那麼所有的就是Delete都行得通!爲了通過複雜的JSON數據,這裏是我的電話(我已經調整了代碼,使其簡單的通過顯示只有一個參數 - 用戶名被通過JSON發送):的MonoTouch/iPhone - 呼叫到HttpWebRequest.GetRequestStream()連接到服務器時,HTTP方法是刪除
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();
在服務器上,刪除方法看起來已經此定義:
public void Delete(Credentials user)
其中憑證是複雜類型。
現在,這是問題!
上面的代碼,一旦進入該服務器上的刪除方法,因爲它擊中:
req.GetRequestStream()
,因此發送到刪除方法的參數最終被空
而這裏的奇怪的部分: 如果我使用完全相同的代碼使用測試VS 2010的Windows應用程序,甚至上面的代碼工作...即它不會調用Delete直到req.GetResponse()被調用!在這種情況下,Delete方法的參數是一個有效的對象!
問題
任何意見或這是MonoTouch的一個bug,如果是這樣,任何解決方法嗎?
注:
如果我改變刪除定義公共無效刪除(用戶名字符串) 和替代JSON,如果我傳遞參數的URL本身的一部分,一切正常。但就像我說的這只是一個簡單的例子來說明我的問題。任何幫助表示讚賞!
嗨poupou,感謝您的回覆。我確實審查了鏈接 - 雖然早期評論表明身體被忽略,但有一條新的評論說這是允許的。無論如何,就像我在原始消息中提到的那樣,相同的代碼在Visual Studio 2010窗體應用程序中工作 - 即它不會忽略發送的附加json數據。聽起來我應該提交bugzilla報告。讓我知道,如果你認爲否則我會這樣做。 – 2012-08-07 12:35:04
完成。提交了一份關於bugzilla的報告。感謝poupou! – 2012-08-08 21:01:41
@AMSIDev您可以發佈bugzilla報告的網址嗎?非常感謝! – 2013-07-24 08:38:05