Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ASP.net MVC-操作不喜欢JSON字符串400错误请求_Javascript_Jquery_Asp.net Mvc - Fatal编程技术网

Javascript ASP.net MVC-操作不喜欢JSON字符串400错误请求

Javascript ASP.net MVC-操作不喜欢JSON字符串400错误请求,javascript,jquery,asp.net-mvc,Javascript,Jquery,Asp.net Mvc,我有一个动作需要两个字符串。其中一个字符串是一个又大又难看的json字符串。我怀疑该操作不允许传递特殊字符,因为我一直收到一个400错误的请求 可以将序列化json对象传递给操作吗 public ActionResult SaveState(string file, string state) { string filePath = GetDpFilePath(file); HtmlDocument htmlDocument = new HtmlDocum

我有一个动作需要两个字符串。其中一个字符串是一个又大又难看的json字符串。我怀疑该操作不允许传递特殊字符,因为我一直收到一个400错误的请求

可以将序列化json对象传递给操作吗

public ActionResult SaveState(string file, string state)
    {
        string filePath = GetDpFilePath(file);
        HtmlDocument htmlDocument = new HtmlDocument();
        htmlDocument.Load(filePath);
        HtmlNode stateScriptNode =
            htmlDocument.DocumentNode.SelectSingleNode("/html/head/script[@id ='applicationState']");
        stateScriptNode.InnerHtml = "var applicationStateJSON =" + state;
        htmlDocument.Save(filePath);

        return null;


    }
客户端脚本

  'e' is a large json string  

$.post('/State/SaveState/' + fileName+'/' + '/' + e + '/');
strong文本

我现在使用UriEncoding()对文本进行编码,但没有任何区别。我认为MVC操作不允许我在默认情况下发送这些特殊字符。。这是真的吗?你是如何解决这个问题的

$.post('/State/SaveState/'+encodeURIComponent(fileName)+'/'+'/'+encodeURIComponent(e)+'/')

样本请求:


请求URL:http://localhost:51825/State/SaveState/aa6282.html//%7B%22uid%22%3A%22testUser%22%2C%22a

在将其添加到URL之前,您可能需要对
e
进行HTML编码。此外,您还有一个额外的
/
,您不需要。

您需要在发出请求时对其进行编码:

$.post('/State/SaveState/' + encodeURIComponent(fileName) + '/' + encodeURIComponent(e));

是的,序列化的JSON对象可以传递给操作方法。MVC3通过内置JSON绑定使这一点更加容易。我使用json2库来序列化对象。有关更多详细信息,请参阅本文。真的很棒


因为我要将此数据发送到服务器,并且我要发送的字符串的大小很大。我真的应该在邮件正文中发送数据

似乎对通过查询字符串发送的数据量也有限制。我不能确定这是否是错误消息的来源,但这肯定是有意义的。如果以下立柱工作正常:

 $.post('/State/SaveState/', { file: fileName, state: e });

谢谢这个解决方案要求我创建一个可以绑定JSON的DTO对象,不是吗?因为我只想把它当作一个字符串,这似乎是一个额外的步骤。是的,你说得对,是的。你能举一个JSON字符串的例子吗?您可以在没有对象服务器端的情况下完成它。这似乎没有什么不同。我更新了我的问题以反映我的改变。哦…额外的斜杠…我删除了它们。