Javascript ASP.net MVC-操作不喜欢JSON字符串400错误请求
我有一个动作需要两个字符串。其中一个字符串是一个又大又难看的json字符串。我怀疑该操作不允许传递特殊字符,因为我一直收到一个400错误的请求 可以将序列化json对象传递给操作吗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
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字符串的例子吗?您可以在没有对象服务器端的情况下完成它。这似乎没有什么不同。我更新了我的问题以反映我的改变。哦…额外的斜杠…我删除了它们。