我的一个POST操作是抛出HTTP 404错误。我最近几个小时都在这里,不知道出了什么问题!同一控制器中的所有其他操作都可以正常工作。我很确定拼写是正确的。在调试模式下,这种方法永远不会被击中(好吧,显然我猜)。请帮忙。
这是行动方法 -
public class LookupTableController : Controller
{
[HttpPost]
public ActionResult AjaxLookupTableCRUDDelete(int lookupId)
{
LookupTable lookuptable = db.LookupTables.Find(lookupId);
if (lookuptable != null)
{
db.LookupTables.Remove(lookuptable);
db.SaveChanges();
}
return Index();
}
无论我如何尝试访问它,它都会抛出404错误!
我直接在浏览器上试用了http://localhost:60328/LookupTable/AjaxLookupTableCRUDDelete/?lookupId=111
,
显示 -
>Server Error in '/' Application.
无法找到资源。 说明:HTTP 404.您要查找的资源(或其某个>依赖项)可能已被删除,名称已更改,或暂时>不可用。请查看以下网址,并确保正确拼写>
请求的网址:/ LookupTable / AjaxLookupTableCRUDDelete /
Fiddler -
标题 - POST / LookupTable / AjaxLookupTableCRUDDelete?lookupId = 13 HTTP / 1.1
[HttpException]: A public action method 'AjaxLookupTableCRUDDelete' was >not found on controller 'GBPReconTool.Controllers.LookupTableController'.
路由是标准的 -
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
已解决 - 谢谢大家,结果证明是GET vs POST问题。 - 当我第一次编译它时,它没有HTTPGet或HTTPPost属性。我不确定ASP.NET MVC4如何确定它应该是什么。在任何情况下,显式POST ajax调用失败并开始直接在浏览器中测试它。浏览器显然是将其发布为GET。我还不清楚这是如何确定的,但我想将HTTPPost属性添加到控制器是最终解决它的问题。猜猜我会读到ASP.NET和浏览器如何确定一个动作是GET还是POST。
答案 0 :(得分:0)
尝试使用此...
[HttpPost]
public ActionResult AjaxLookupTableCRUDDelete(int id)
{
LookupTable lookuptable = db.LookupTables.Find(id);
if (lookuptable != null)
{
db.LookupTables.Remove(lookuptable);
db.SaveChanges();
}
return Index();
}
然后尝试使用...
POST http://localhost:60328/LookupTable/AjaxLookupTableCRUDDelete/111
正如其他人所说,您需要确保将请求作为POST发送。
您可能想要检查的另一件事是在Fiddler中正确设置了ContentType。
Content-Type: application/json; charset=utf-8
答案 1 :(得分:0)
将操作签名更改为以下内容:
public ActionResult AjaxLookupTableCRUDDelete(int? id)
{
}
这里的想法是让动作变量名称与您在路线中已有的名称相匹配。
POST网址需要如下所示:
http://localhost:60328/LookupTable/AjaxLookupTableCRUDDelete/111
您不需要提供变量名称,因为mvc会根据您的路线从网址中删除它
答案 2 :(得分:0)
我知道这听起来很简单,但是:
然后使用Chrome或FireFox开发工具(F12)并查看“网络”标签。您可以查看传递给应用程序的实际URL和类型(POST,GET)。您还将看到任何查询字符串参数和表单数据。
一般来说,如果出现问题,就会明白这一点。
仅供参考 - 您也可以使用Fiddler2来查看实际的http请求。