2011-12-20 60 views
1

在我的MVC Web應用程序中,我通過WebClient調用POST到特定的控制器。我需要這個調用是UTF32。但是,每當我使用UTF32執行此操作時,它都不起作用。它返回一個錯誤500.當我切換到UTF8時,它工作得很好。對於UTF32錯誤500,不適用於MVC中的UTF8

這裏是我的UTF32代碼:

var name = SettingsManager.GetScopeAttribute("[Map.Options]", "Name"); 

using (var client = new WebClient()) 
{ 
    //client.Encoding = Encoding.UTF8; 
    client.Headers.Add("Content-Type", 
        "application/x-www-form-urlencoded; charset=utf-32"); 
    client.UploadData(url, Encoding.UTF32.GetBytes("facebookID=" 
    + IngamableCommunicator.FacebookProfileID 
    + "&name=" 
    + name 
    + "&content=" 
    + File.ReadAllText(mapPath))); 
} 

服務器報告此問題:

參數字典包含參數無效項「facebookID「System.Int32」的非可空類型爲'FlamefusionEntertainment.Areas.Scavenius.Controllers.MapCloudController'中的方法'System.Web.Mvc.ActionResult SubmitMap(Int32,System.String,System.String)'。可選參數必須是引用類型,可爲空類型,或者聲明爲可選參數。

我與UTF8遇到的問題是,當數據實際上經歷,因爲我有特殊字符(空格不可見等),它保存時,通過實體框架的Microsoft SQL數據庫出錯。

我檢索的數據在某種程度上是畸形的。一些換行符不見了,一些空白不在那裏,等等。

+0

什麼是導致500錯誤的異常?什麼是錯誤細節? – Oded 2011-12-20 21:41:18

+0

就是這樣。它甚至不能執行控制器。即使在控制器第一行的第一個斷點上也沒有。 – 2011-12-20 21:44:30

+0

事件日誌說什麼? – Oded 2011-12-20 21:47:43

回答

0

我發現這是因爲MVC顯然不支持UTF32請求。正如Damien指出的那樣,UTF32和UTF8在內容方面沒有區別。因此,當我切換到UTF8時,這一切都奏效了。

我發現這是因爲我使用HttpUtility類的UrlEncode函數來編碼表單數據變量。相反,我應該使用UrlEncodeUnicode函數。