我想在C#中使用UTF32发出HTTP POST请求。我可以使用UTF8找到大量资源,但是它们都没有正常工作 - 至少在我需要UTF32的场景中没有。
你能帮助我吗?
修改1 代码位于:
public static void SubmitMap(string mapPath)
{
var request = WebRequest.Create(Domain + "/MapCloud/SubmitMap");
request.Method = "POST";
var postData = "facebookID=" + IngamableCommunicator.FacebookProfileID + "&name=Sample&content=" + /*HttpUtility.UrlEncode(File.ReadAllText(mapPath)*/ "lala";
var byteArray = Encoding.UTF32.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
var dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
var response = request.GetResponse();
Console.WriteLine(((HttpWebResponse)response).StatusDescription);
response.GetResponseStream();
//dataStream = response.GetResponseStream();
//StreamReader reader = new StreamReader(dataStream);
//string responseFromServer = reader.ReadToEnd();
//Console.WriteLine(responseFromServer);
//reader.Close();
dataStream.Close();
response.Close();
}
代码返回错误500.当然,这可能是服务器的问题。但是服务器配置为在出现错误时将堆栈跟踪输出为字符串。
编辑2 我尝试将内容类型更改为“text / plain”,它基本上就是这样。仍然没有运气。
编辑3 服务器在.NET Framework 4.0上运行ASP .NET MVC 3,并且所联系区域的控制器如下所示:
public class MapCloudController : Controller
{
[HttpPost]
public ActionResult SubmitMap(string name, string content, int facebookID)
{
try
{
var container = new ModelContainer();
Gamer gamer = container.GamerSet.FirstOrDefault(g => g.FacebookID == facebookID);
var map = new ScaveniusMap();
map.Content = content;
map.Name = name;
map.SubmissionTime = DateTime.UtcNow;
map.Owner = gamer;
container.AddToScaveniusMapSet(map);
Debug.Assert(gamer != null, "gamer != null");
gamer.Maps.Add(map);
container.SaveChanges();
container.Dispose();
ViewBag.Error = "No error";
}
catch (Exception ex)
{
ViewBag.Error = facebookID + ": " + ex;
}
Response.StatusCode = 200;
Response.Status = "success";
Response.SubStatusCode = 0;
return View();
}
}
答案 0 :(得分:2)
“至少不在我需要UTF32的场景中”
不需要UTF-32。您可以使用UTF-8表达任何Unicode代码点。
您正在与之交谈的服务器可能不支持UTF-32,这就是整个问题。
此外,如果您使用“application / x-www-form-urlencoded”,您甚至可以选择字符编码。相反,您必须对那些不是ASCII的字符进行百分比编码(请参阅定义此媒体类型的HTML4规范)。
答案 1 :(得分:1)
使用HttpWebRequest对象,执行以下操作:
var req = WebRequest.Create("http://posturl") as HttpWebRequest;
var encodedBytes = System.Text.Encoding.UTF32.GetBytes("your string of data");
using (var stream = req.GetRequestStream())
stream.Write(encodedBytes, 0, encodedBytes.Length);