当Json Length过长时,对ASP.NET MVC Controller的Ajax调用返回404
Ajax call to ASP.NET MVC Controller Returns 404 when Json Length is too Long
我有一个简单的ajax调用,它将一个json字符串传递给控制器操作,如果json的内容部分太长,或者通常是json字符串,服务器会返回一个404,如果我缩短了内容,请求就会正确解析并完成。
我以为它已经达到了微软JavaScriptSeralizer的8k限制,但我已经更新了MaxJsonLength,但运气不好。有人能告诉我这里发生了什么事吗?
这是我的ajax请求(注意:这是使用Knockout.js)
self.updatePost = function () {
var postToUpdate = ko.toJS(self.selectedPost);
postToUpdate.Content = $("#wmd-input").val();
console.log(postToUpdate);
$.getJSON('/blogs/posts/update', {post: ko.toJSON(postToUpdate)}, function(post) {
if (post) {
// remove the selected post and add the updated post
self.posts.remove(self.selectedPost());
var updatedPost = new Post(post);
self.posts.unshift(updatedPost);
self.selectedPost(updatedPost);
$("#ghost-list li:first").trigger('click');
// show alert
}
});
};
C#控制器动作
public JsonResult Update(string post)
{
var seralizer = new JavaScriptSerializer();
seralizer.MaxJsonLength = int.MaxValue;
seralizer.RecursionLimit = 100;
var selectedPost = seralizer.Deserialize<Post>(post);
var student = students.GetStudentByEmail(User.Identity.Name);
var blog = db.Blogs.SingleOrDefault(b => b.StudentID == student.StudentID);
var postToUpdate = blog.BlogPosts.SingleOrDefault(p => p.ID == selectedPost.ID);
if (postToUpdate != null)
{
// update the post fields
postToUpdate.Title = selectedPost.Title;
postToUpdate.Slug = BlogHelper.Slugify(selectedPost.Title);
postToUpdate.Content = selectedPost.Content;
postToUpdate.Category = selectedPost.Category;
postToUpdate.Tags = selectedPost.Tags;
postToUpdate.LastUpdated = DateTime.Now;
if (selectedPost.Published)
{
postToUpdate.DatePublished = DateTime.Now;
}
// save changes
db.SaveChanges();
var jsonResult = Json(seralizer.Serialize(selectedPost), JsonRequestBehavior.AllowGet);
jsonResult.MaxJsonLength = int.MaxValue;
return jsonResult;
}
return Json(false, JsonRequestBehavior.AllowGet);
}
您是否尝试过使用post
方法:
$.post('/blogs/posts/update', {post: ko.toJSON(postToUpdate)}, function(post) {
if (post) {
// remove the selected post and add the updated post
self.posts.remove(self.selectedPost());
var updatedPost = new Post(post);
self.posts.unshift(updatedPost);
self.selectedPost(updatedPost);
$("#ghost-list li:first").trigger('click');
// show alert
}
}, 'json');
在web配置中尝试
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="500000000"/>
</webServices>
</scripting></system.web.extensions>
相关文章:
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- 将Javascript数组发送到控制器ASP.NET MVC
- 如何使用Spring MVC将Facebook返回的响应数据保存在Java类中
- 如何在MVC中使用jQuery在文本框旁边显示文本
- MVC 3页面导航和使用javascript传递参数
- 在mvc应用程序中,在回发时保留最初隐藏的文本框的隐藏或可见状态
- Flash Uploadify在调用我的MVC控制器时没有保留会话/授权
- 将不在模型中的数据返回到mvc控制器
- MVC在通过javascript提交时会丢失值
- 使用javascript在MVC中查找网格长度时出错
- 什么'是在asp.net MVC中将本地化的resources.resx文件转换为javascript文件的有效
- 在MVC 4中,对Controller的Ajax调用为空
- 打印从Spring MVC Controller发送的字符串数组只显示“;toJSON”;在javascript中
- 当Json Length过长时,对ASP.NET MVC Controller的Ajax调用返回404
- 您将如何在Javascript中实现Controller?(在自制MVC内部)
- Javascript Kendo 数据源调用 MVC Controller
- 如何在Web API(MVC)中将多个变量从typescript(angular.js)传递给Controller
- MVC - Html.操作使用Javascript检索元素,然后将其作为参数传递给Controller,然后返回一个Pa
- 通过jqgrid调用MVC中的Controller's Action
- 将javascript值赋给ASP中的Controller变量.. NET MVC视图