2013-05-15 258 views
0

我已經看過幾篇關於解決特殊字符傳輸不正確的方法。但是,我想要一個更好更簡單的解決方案(可能無法找到它)。編號特殊字符未被jquery ajax正確發送

我有一個函數,我也傳遞一個對象。在對象(myObject)中,可以有一些帶有特殊編號字符的文本(Bill ’ s,右引號特殊編號字符)。

當我嘗試發送數據時,它會窒息。於是,我瀏覽了我的代碼,並在任何地方逃脫,它接受了用戶的輸入,並且在顯示信息的地方沒有轉義。

問題:顯示或接受用戶輸入

  • 可能丟失的地方。
  • 數據與轉義字符一起存儲。

我已經看到了解決方案,特殊字符將被消毒,但它需要一個特殊字符的列表。或者我可以嘗試解碼後端的轉義字符。

  • 後端 - MVC .NET C#
  • jQuery的版本:1.7.2

    var json = $.toJSON(myObject); 
    
    $.ajax({ 
        type: 'POST', 
        url: RootUrl + "Viewer/Save/", 
        data: { "json": json }, 
        async: false, 
        contentType: "application/json; charset=utf-8", 
        success: function (data) { 
         var $("#display").(data); 
        }, 
        error: function (xhr, status, error) { 
         alert(error); 
        } 
    }); 
    

的更多信息:

JSON字符串傳遞到MVC控制器。該方法看起來像這樣。

public ContentResult Save(string json) 
{ 
    try 
    { 
     dynamic data = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<dynamic>(json); 
    } 
    catch (Excepteion ex) 
    { 
     // More code 
    } 
} 

錯誤消息時我在Chrome的調試器我得到的是:

  • 500(內部服務器錯誤)

更多我想想,我想知道是否有是後端中的設置,需要更改爲接受特殊編號的字符。我之所以這麼說,是因爲如果我將一個斷點設置爲MVC控制器方法的開始,那麼它實際上從來沒有達到斷點。但是,如果逃跑或使用撇號符號,那很好。

我將繼續搜索並回復我的發現。

UPDATE

繼信息:Getting "A potentially dangerous Request.Path value was detected from the client (&)"

[ValidateInput(false)] 
    [HttpPost] 
    public ContentResult SaveTailoring(string json) 

我將此添加到我的代碼,它解決了我的獲取數據到控制器的問題。我正在研究如此之多,並會對這種技術的優點和缺點有所瞭解。

+0

代碼的哪個部分應該做一些符號,例如'’'(它不能包含空格 - 問題中的那個)?因此,外部序列化的HTML「’」只是七個Ascii字符。此外,如果您發佈的數據將其作爲UTF-8傳輸,如代碼所示,爲什麼您會考慮轉義角色? –

+0

不,它不包含空格。是的,它序列化好,但是當我在MVC控制器中收到它時,我得到一個錯誤500,內部服務器錯誤。我昨天晚上在想這個問題,不知道這個問題是否在後端更多,不知道。 –

+0

你用'ApiController'試過這個嗎?我不是MVC專家,但是在構建我的jQuery ajax方法時,我發現它們更容易處理,併爲頁面/部分保留正常的'Controller's。發佈UTF-8我不希望需要任何特殊的轉義,但我沒有嘗試過。 – Klors

回答

0

如果你想與ApiController嘗試這種話,假設你有一個名爲在你的服務器代碼,並在JavaScript匹配表示myObject類,這

public ContentResult Save(string json) 
{ 
    try 
    { 
     dynamic data = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<dynamic>(json); 
    } 
    catch (Excepteion ex) 
    { 
     // More code 
    } 
} 

將成爲更多的東西就是這樣,讓你對於具有天然類型

public class myObjectController : ApiController 
{ 
    // ... code for GET/PUT/DELETE versions omitted ... 

    // POST api/myObject 
    public myObject PostmyObject(myObject myObject) 
    { 
     // code to save and update myObject 
     return myObject; 
    } 
} 

合理無縫工作雖然自動創建的REST方法一般返回HttpResponseMessagePOST S作狀態和標題給獲取新保存的對象的鏈接。