我有一个控制器动作方法,它看起来像这样:
public ActionResult testMethod(int id)
{
//do something...
//return something...
return View();
}
Run Code Online (Sandbox Code Playgroud)
但是当我指定它应该是一个"Post"方法时,我得到一个'404 not found error':
[HttpPost]
public ActionResult testMethod(int id)
{
//do something...
//return something...
return View();
}
Run Code Online (Sandbox Code Playgroud)
我在同一个控制器中有其他控制器动作方法 - POST和GET,它们工作正常.但这一个不?这是怎么回事?(我确定我在这里遗漏了一些明显的东西...)
更新:ajax调用请求控制器方法:var id = 1;
$.ajax({
url: '/indices/testMethod/',
data: id,
type: 'POST',
success: function (data) {
//Do something
}
});
Run Code Online (Sandbox Code Playgroud)
我也尝试用Postman测试方法,确保发送POST请求.
更新2:我已经尝试将参数更改为id,并尝试确保所有方法和url位置都大写以匹配,但没有任何影响.
在Fiddler中,我可以看到实际上正在进行GET请求,即使我在ajax调用中指定了POST请求,所以现在我需要找出为什么请求最终作为GET而不是POST发送.
我也尝试过包含属性路由描述,就像这样
[HttpPost]
[Route("indices/TestMethod/{id:int}")]
public ActionResult TestMethod(int id)
Run Code Online (Sandbox Code Playgroud)
然后用不同的url尝试了ajax调用:
$.ajax({
url: '/indices/TestMethod/1',
data: id,
type: 'POST',
success: function (data) {
var tr = 123;
var yr = data;
//Do something
}
});
Run Code Online (Sandbox Code Playgroud)
使用属性路由和URL中的参数值,我在Fiddler中看到首先发生POST请求,它获得301状态错误,但随后也发出GET请求,这会得到404错误.
更新3:经过更多调查后,我将问题定义缩小到足以使得开启一个新问题是有意义的,可以在这里找到: ASP MVC jQuery $ .ajax POST请求不调用控制器方法,但在"新鲜"MVC中工作项目
此问题似乎是由此项目处于活动状态的内容安全策略设置引起的.
您可能需要将FromBody- 属性添加到 - 参数,int param1因为它是一个简单类型?请参阅此处了解更多信息。
否则,需要采用该格式的路由/indices/testMethod/{param1}(即参数必须位于 URL 中,即使它是 POST 请求)。该路由可能未定义,即在您的global.asax.cs. /indices/testMethod/1例如,您可以尝试发出 POST 请求。只是想试试是否真的是路由问题?
如果您的路由确实有问题,您可以使用Attribute Routing为您的方法定义特定路由。至少对于测试/开发而言,因为这可以更轻松地查看/理解实际为您的方法定义的路由。
一些需要缩小范围的其他问题,它实际上可能是什么:
dataGoesHere?global.asax.cs)?更新
我会尝试以下操作:
像这样定义控制器方法:
[HttpPost]
[Route("indices/TestMethod/")]
public ActionResult TestMethod([FromBody] int id)
Run Code Online (Sandbox Code Playgroud)
像这样定义操作调用:
$.ajax({
url: '/indices/TestMethod/',
data: id, // alternatively try: {id: id}
type: 'POST',
success: function (data) { }
});
Run Code Online (Sandbox Code Playgroud)
尝试将其id作为简单值传递,或者尝试将其与带有 -property 的对象一起传递id(请参阅上面的注释)。
| 归档时间: |
|
| 查看次数: |
12335 次 |
| 最近记录: |