【发布时间】:2016-12-07 00:36:21
【问题描述】:
我正在尝试通过 ajax 调用操作方法,但得到 404。为了说明,以下是我的 ajax:
$.ajax({
type: "GET",
url: "/Product/LandingPage",
data: {trackingCode: trackingCode, productId: productId},
success: function (data) {
alert("I worked!");
}
});
通过提醒参数,我可以看到 trackingCode 和 productId 都已成功设置,所以这不是问题。我想,为了测试这一点,我应该能够像这样直接调用 URL:
http://www.mywebsite.com/Product/LandingPage?trackingCode=fgdfg&productId=213456
但是,当我尝试收到 404 错误时,可能是路由无法正常工作。我添加了以下路线:
routes.MapRoute(
"Product_LandingPage",
"Product/LandingPage",
new { controller = "Product", action = "LandingPage" }, new { trackingCode = UrlParameter.Optional ,productId = @"\d+" });
但我仍然得到 404。这是我的产品控制器方法:
[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Head)]
public ActionResult LandingPage(string trackingCode, int productId)
{
//Some magic in here
}
我觉得我在这里遗漏了一些明显的东西。关于我为什么会收到 404 的任何想法?
请注意,这可能是导致问题的其他代码,我只是想彻底检查我正在做什么以排除我的愚蠢错误。
【问题讨论】:
-
Default 路由对于该 URL 就足够了。您能否删除
Product_LandingPage路由并重试? -
确实这正是我的想法,但我在添加路线之前得到了 404,如果我删除路线,我会再次得到它。可能是控制器声明中的其他原因导致此问题,但我想排除我的代码是问题所在。
-
您能否举例说明有效的 URL(页面或 api 调用或两者兼有)?
-
让我们忘记 Ajax。由于是 Get 方法,可以在浏览器中测试。您能否添加以下默认路由 only 仅此而已,然后重试
routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional} -
你可以试试 Phil Haacks 路由调试器,见博文:haacked.com/archive/2008/03/13/url-routing-debugger.aspx,NuGet 包:nuget.org/packages/routedebugger
标签: c# asp.net-mvc asp.net-mvc-routing