【问题标题】:MVC Routing issue 404 received收到 MVC 路由问题 404
【发布时间】: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


【解决方案1】:

使用 Phil Haacks 路由调试器我发现了这个问题,它是由另一条路由引起的,在路由命令链的上层。重组已经解决了这个问题。感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 2015-02-24
    • 2011-10-25
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    相关资源
    最近更新 更多