错误500为UTF32,而不是为MVC中的UTF8

本文关键字:MVC 中的 UTF8 UTF32 错误 | 更新日期: 2023-09-27 18:18:31

在我的MVC web应用程序中,我通过WebClient调用POST到特定的控制器。我需要这个电话是UTF32格式的。然而,每当我用UTF32这样做时,它就不起作用了。它返回一个错误500。当我切换到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)));
}

服务器报告此问题:

参数字典包含一个非空类型'System '的参数'facebookID'的空条目。Int32' for method 'System. web . mvc . actionresult SubmitMap(Int32, System. web . mvc . actionresult)'在'FlamefusionEntertainment.Areas.Scavenius.Controllers.MapCloudController'。可选形参必须是引用类型、可空类型,或者声明为可选形参。

我与UTF8的问题是,当数据实际通过,因为我有字符(不可见的空格等)是特殊的,它出错时,通过实体框架保存在Microsoft SQL数据库。

我检索的数据在某种程度上是畸形的。没有换行符,没有空格,等等。

错误500为UTF32,而不是为MVC中的UTF8

我发现这是因为MVC显然不支持UTF32请求。正如Damien所指出的,就内容而言,UTF32和UTF8之间没有区别。因此,当我切换到UTF8时,一切都工作了。

我发现这是因为我正在使用HttpUtility类的UrlEncode函数来编码表单数据变量。相反,我应该使用UrlEncodeUnicode函数。