簡體   English   中英

在兩個asp.net MVC Web應用程序之間傳遞非ASCII字符將無法識別

[英]Passing non-ASCII characters between two asp.net MVC web applications will not be recognized

我有兩個asp.net mvc-4和mvc-5 web應用程序,現在在我的第一個asp.net mvc中,我有以下WebClient在第二個Web應用程序上調用一個動作方法(Home / CreateResource): -

using (WebClient wc = new WebClient()) 
         {
          var data = JsonConvert.SerializeObject(cr);             
          string url = scanningurl + "Home/CreateResource";
          Uri uri = new Uri(url);
          wc.Headers.Add(HttpRequestHeader.ContentType, "application/json");
          wc.Headers.Add("Authorization", token);
          output = wc.UploadString(uri, data);
         }

現在在傳輸到第二個操作方法的data對象中,它包含一個密碼值,在我的情況下,這個值是££123 ,有2個非ASCII字符。

現在在第二個動作方法上,它將接受以下值: -

在此輸入圖像描述

如果有辦法在2個動作方法之間傳遞非ASCII字符,那么任何人都可以這樣做嗎? 我在第一個操作方法上檢查密碼是否已正確序列化,並且密碼正在從視圖正確傳遞到操作方法。 但問題是在數據如何在網絡內傳輸或第二個動作方法上的模型綁定器如何接受傳入的數據對象?

總結一下:

如果要傳輸非ASCII(或高ASCII)字符(例如£),則需要指定WebClient的Encoding屬性。

在這種情況下,設置屬性值的順序並不重要,只要在調用UploadString之前設置它。

using (WebClient wc = new WebClient())
{
    var data = JsonConvert.SerializeObject(cr);
    string url = scanningurl + "Home/CreateResource";
    Uri uri = new Uri(url);
    wc.Headers.Add(HttpRequestHeader.ContentType, "application/json");
    wc.Headers.Add("Authorization", token);
    wc.Encoding = Encoding.UTF8;
    output = wc.UploadString(uri, data);
}

如果您希望使用WebClient從網站下載數據,請確保將編碼設置為該網站使用的值。

只需更改wc.Headers.Add(HttpRequestHeader.ContentType, "application/json"); to wc.Headers.Add(HttpRequestHeader.ContentType, "application/json;charset=utf-8");

我不久前有類似的問題。 解決方案是使用UploadDataAsync

using (WebClient client = new WebClient())
{
    client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
    client.Headers.Add(HttpRequestHeader.Accept, "application/json");
    client.UploadDataAsync(new Uri(apiUrl), "POST", Encoding.UTF8.GetBytes(jsonString));
}

雖然理論上UTF-8應該能夠編碼你需要的任何字符(因為它有多字節編碼方案來處理擴展的字符),但另一種解決方案是:

Base 64對您的文本進行編碼。

編碼s

string encoded = Convert.ToBase64String(Encoding.ASCII.GetBytes(s));

解碼encoded

string s = Encoding.ASCII.GetString(Convert.FromBase64String(encoded));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM