【发布时间】:2015-12-27 00:09:03
【问题描述】:
我有一个控制器操作方法,它看起来像这样:
public ActionResult testMethod(int id)
{
//do something...
//return something...
return View();
}
但是当我指定它应该是“发布”方法时,我得到一个“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 而不是作为发布。
我也试过包含一个属性路由描述,像这样
[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 request does not call controller method, but works in "fresh" MVC project
此问题似乎是由对此项目处于活动状态的内容安全策略设置引起的。
【问题讨论】:
-
您如何尝试联系此操作?
-
您确定请求是 POST 到动作,而不是其他动词吗?安装 Fiddler 并检查请求数据。
-
添加了一些额外的信息 - 据我所知,发送了一个 POST 请求,但由于我收到 404 错误,它从未到达控制器。
-
使用 Fiddler 查看实际发送的内容。您可能调用了错误的 URL - 您使用的是相对于根目录的 url,而不是当前页面。如果您的网站托管在例如
http://someroot/somesubsite,您的代码将调用http://someroot/indices/testMethod/,而不是http://someroot/somesubsite/indices/testMethod -
您可以使用@Html.ActionLink 通过提供控制器和动作名称来生成目标ULR,从而避免URL 歧义
标签: asp.net-mvc