我有一个控制器操作方法,当它看起来像这样时可以工作:
public ActionResult testMethod(int id)
{
//do something...
//return something...
return View();
}
但是当我指定它应该是“Post”方法时,我收到了一个'404未找到错误':
[HttpPost]
public ActionResult testMethod(int id)
{
//do something...
//return something...
return View();
}
我在同一个控制器中有其他的POST和GET控制器动作方法,它们都可以正常工作。但是这个不行?发生了什么事?(我确定我漏掉了一些显而易见的东西...)
更新: 一个ajax调用请求控制器方法: var id = 1;
$.ajax({
url: '/indices/testMethod/',
data: id,
type: 'POST',
success: function (data) {
//Do something
}
});
我也尝试使用Postman测试该方法,确保发送了POST请求。
更新2: 我尝试将参数更改为id,并尝试确保所有方法和url位置都大写以匹配,但没有任何效果。
在Fiddler中,我可以看到实际上正在进行GET请求,即使我在ajax调用中指定了POST请求,所以现在我需要找出为什么请求最终被发送为GET而不是POST。
我还尝试包含一个属性路由描述,就像这样
[HttpPost]
[Route("indices/TestMethod/{id:int}")]
public ActionResult TestMethod(int id)
然后尝试使用不同的url进行ajax调用:
$.ajax({
url: '/indices/TestMethod/1',
data: id,
type: 'POST',
success: function (data) {
var tr = 123;
var yr = data;
//Do something
}
});
启用属性路由后,参数值在URL中,我在Fiddler中看到首先发生了POST请求,它得到了301状态错误,但随后也发生了GET请求,它得到了404错误。
更新3: 经过更多调查,我成功地缩小了问题定义范围,这使得开启一个新的问题是有意义的。该问题可以在此处找到: ASP MVC jQuery $.ajax POST请求不会调用控制器方法,但在“新”MVC项目中可以工作 这个问题似乎是由于内容安全策略设置导致的。
$.post
而不是$.ajax
,以确保您没有错过任何其他配置? - PzYon