0

我看过几篇关于绕过未正确传输的特殊字符的不同方法的帖子。但是,我想要一个更好、更简单的解决方案(可能找不到)。

我也有一个传递对象的函数。在对象(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 控制器方法的开头设置一个断点,它实际上永远不会到达断点。但如果转义或使用撇号,就可以了。

我将继续搜索并回复我的发现。

更新

遵循信息:获取“从客户端(&)检测到潜在危险的 Request.Path 值”

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

我将此添加到我的代码中,它解决了我将数据输入控制器的问题。我很乐意进行更多研究,并希望对这项技术的利弊有任何想法。

4

1 回答 1

0

如果您想使用 ApiController 尝试此操作,那么假设您myObject在服务器代码中调用了一个类,并且在 JavaScript 中有一个匹配的表示,这个

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 方法通常会返回一个HttpResponseMessagefor POSTs,它有一个状态和一个标头,提供指向新保存对象的 get 的链接。

于 2013-05-17T21:14:24.230 回答