asp.net mvc ajaxpost返回404未找到

我正在尝试使用jquery ajax函数执行ajax请求。 我有一种非常奇怪的行为。 我的文件夹结构是这样的:

文件夹结构

我的客户端ajax调用(在UserManagement / Index.cshtml中)如下所示:

var rolename = viewModel.roleName(); $.ajax({ type: "POST", url: '@Url.Action("AddRole", "UserManagement")', contentType: "application/json; charset=utf-8", data: { rolename: rolename }, success: function(data) { var role = new Role(rolename); model.addRole(role); model.appendItem("#accordion", role.getItem()); viewModel.roleName(""); } }); 

在我的UserManagementController.cs中,我有以下操作:

  // GET: /UserManagement/ public ActionResult Index() { var serializer = new JavaScriptSerializer(); var context = new ApplicationDbContext(); var users = context.Users.ToList(); var roles = context.Roles.ToList(); ViewBag.Users = users; ViewBag.Roles = roles; return View(); } // // POST: /UserManagement/AddRole [HttpPost] public string AddRole(string rolename) { Response.StatusCode = 200; return "gsfgdg"; } 

我已经尝试使用GET而不是POST或将AddRole更改为void类型和其他任何其他但我不能让它工作。 我总是收到“404 not found”。 有人可以帮忙吗?

提前致谢!

如果您删除Content-Type,您的案例将有效。

Case 1: If we use Content-Type: "application/json"

当您使用Content-Type of application / json请求时,在服务器端ScriptServices期望数据为JSON序列化字符串。

但是,我们可以看到"Invalid JSON primitive ***"通常是响应的结果。

在这里我们应该理解将jQuery的“数据”选项传递为“{‘param’:’value’}”,而不是{‘param’:’value’}。

因此,在您的情况下,要实现解决方案:我们需要提供如下data

 var rolename = viewModel.roleName(); $.ajax({ type: "POST", url: '@Url.Action("AddRole", "UserManagement")', contentType: "application/json; charset=utf-8", data: "{ 'rolename':'" + rolename +"' }", success: function(data) { var role = new Role(rolename); model.addRole(role); model.appendItem("#accordion", role.getItem()); viewModel.roleName(""); } }); 

Case 2: If we skip Content-Type: "application/json"

我们应该提供jQuery的“数据”选项作为JSON对象{‘param’:’value’}或{param:’value’}。 (就像你一样)

希望能帮助到你 :)