在c#中使用UTF32发送HTTP POST请求

本文关键字:发送 HTTP POST 请求 UTF32 | 更新日期: 2023-09-27 18:17:55

我想在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 我尝试将内容类型更改为"文本/普通",这基本上是。还是没有运气

编辑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();
    }
}

在c#中使用UTF32发送HTTP POST请求

"至少不是在我需要UTF32的情况下"

不需要

UTF-32。您可以使用UTF-8表示任何Unicode代码点。

您正在与之通信的服务器可能不支持UTF-32,这就是整个问题。

同样,如果你使用"application/x-www-form-urlencoded",你甚至可以选择字符编码。相反,您必须对那些非ASCII字符进行百分比编码(参见定义这种媒体类型的HTML4规范)。

对于您的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);