Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.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 MVC jQuery$.ajax POST请求不调用控制器方法,但在;新鲜的;MVC项目_Javascript_Jquery_Ajax_Asp.net Mvc 4_Http - Fatal编程技术网

Javascript ASP MVC jQuery$.ajax POST请求不调用控制器方法,但在;新鲜的;MVC项目

Javascript ASP MVC jQuery$.ajax POST请求不调用控制器方法,但在;新鲜的;MVC项目,javascript,jquery,ajax,asp.net-mvc-4,http,Javascript,Jquery,Ajax,Asp.net Mvc 4,Http,在ASP.NET MVC项目中,我有一个接受POST请求的控制器方法,如下所示(为了完整起见,使用“User”类): 我使用jQuery Ajax将此方法称为: $.ajax({ url: '/test/TestMethod/', data: JSON.stringify({ user: { name: 'NewUserName', email: 'username@email.com' } }), type: 'POST', success: function

在ASP.NET MVC项目中,我有一个接受POST请求的控制器方法,如下所示(为了完整起见,使用“User”类):

我使用jQuery Ajax将此方法称为:

$.ajax({
    url: '/test/TestMethod/',
    data: JSON.stringify({ user: { name: 'NewUserName', email: 'username@email.com' } }),
    type: 'POST',
    success: function (data) {
        alert(data);
    },
    error: function (xhr) {
        alert('error');
    }
});
当我创建一个新的ASP.NET MVC项目,并将此代码包含在新的测试控制器中时,一切正常。通过Fiddler查看,发出了一个POST请求,我得到了控制器方法返回值

但是,当我在当前正在开发的MVC项目中运行此代码时,它不起作用。从Fiddler中,我看到ajax调用首先启动一个POST方法,该方法获取一个301 http状态错误(“永久移动”)。随后立即发出GET请求,生成404 not found错误(这很有意义,因为没有使用此名称的GET操作方法)

所以我在新项目和现有项目中使用了完全相同的代码,但是代码只在新项目中有效。因此,很明显,我现有的项目中有某种东西以某种方式阻止它正常运行(并导致生成POST和GET请求的奇怪行为)。但我不知道它可能是什么,所以欢迎任何建议

更新-路由信息:

public static void RegisterRoutes(RouteCollection routes)
{
  routes.AppendTrailingSlash = true;
  routes.MapMvcAttributeRoutes();
  routes.MapRoute(
  name: "Default",
      url: "{controller}/{action}/{id}",
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
}
更新2:
看起来此问题是由为此项目打开的内容安全策略设置引起的

您需要将
[FromBody]
注释放在方法的参数之前

[HttpPost]
public ActionResult TestMethod([FromBody]User user)
{
    return Content("It worked");
}

ASP.net MVC framework将使用您在正文中传递的参数来识别该方法。

我在实现自定义错误后遇到此问题,并且我的表单将一个大于允许的最大值的文件发回服务器。这导致了404.13错误。。。我想这是“文件太大”的默认错误

当自定义错误被打开时,我看到的只是404。当我知道请求类型是post,并且它发布的url是正确的时,我得到了一个404错误,这让我抓狂


希望这对别人有帮助

您是否检查了网络选项卡以查看申请是否指向正确的url?url看起来正常:您是否为此现有项目与新项目启用了任何自定义ASP.NET路由?firebug没有显示任何错误?在firebug中,我首先收到一个错误“POST 301永久移动”,然后是“get 404 Not Found”路由机制不使用请求主体来识别要调用的控制器方法,并且可能只需要将
FromBody
添加到参数声明中,就可以在参数必须来自的位置不明确时强制一种方法绑定参数。无论参数是简单类型还是复杂类型,它都可能来自正文,而不包含
FromBody
。该属性只会影响从被调用方法观察到的参数值,而不会影响原则上定位方法的能力。
[HttpPost]
public ActionResult TestMethod([FromBody]User user)
{
    return Content("It worked");
}