【问题标题】:ASP.NET MVC] Route match but controller never called. -> 404ASP.NET MVC] 路由匹配但从未调用控制器。 -> 404
【发布时间】:2012-01-05 12:57:59
【问题描述】:

大家好,我对 MVC3 路由和区域有疑问:

我的路由匹配,但控制器从未被调用,而是出现 404 错误。

我已经设置了一个包含 2 个项目的 MVC3 解决方案:

  • 一个是主要的 MVC 项目:CityServices
  • 一个区域:CityServices.Demo

在我所在的地区,我注册了以下路线:

public class TestAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "Test";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Test_default",
            "Test/{controller}/{action}",
            new { controller = "Stuff", action = "ListAll" }
        );
    }
}

StuffController.cs 的内容:

public class StuffController : Controller
{
    public ActionResult ListAll()
    {
        List<Stuff> lstStuff = new List<Stuff>
                                   {
                                       new Stuff()
                                           {
                                               Id = 0,
                                               Name = "HEeey",
                                               Value = 10.456f
                                           },
                                       new Stuff()
                                           {
                                               Id = 1,
                                               Name = "Beeee",
                                               Value = 456789.47879999f
                                           },
                                       new Stuff()
                                           {
                                               Id = 2,
                                               Name = "HooAAaoo",
                                               Value = 0f
                                           }
                                   };

        return Json(lstStuff);
    }
}

我在主项目中注册区域:

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
        //RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);
    }

我的路由匹配:http://host/Test 但我总是收到 404 错误。

有什么想法吗?

谢谢, - 杰里米

编辑:这是路线匹配的证明:

找到解决方案

所以总结一下。 我的 AreaRegistration 继承类与我的控制器不在同一个命名空间中。 由于我没有任何视图(它只是一个安静的 websvc),因此我不必使用 MvcContribs,当您在与主站点不同的项目中拥有视图和控制器时,这似乎很有用。

希望这对您解决这个问题有所帮助;)

【问题讨论】:

  • 您如何检查您的路线是否与请求真正匹配?
  • 我添加了一个屏幕截图,您可以在其中看到路线匹配。 (使用 Haack 的路由调试器)

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-3-areas


【解决方案1】:

您的区域在另一个项目中,除非您使用 MvcContribs 可移植区域或其他自定义实现,否则默认情况下该区域将无法工作

【讨论】:

  • 这很奇怪,因为路由注入有效。我会尝试谷歌你的建议
  • 我已经尝试过 MvcContribs (goo.gl/OmCxZ)。它在他们的帖子之后起作用。但实际上问题不在于不使用自定义 impl。这是一个命名空间问题(我在阅读 MvcContribs 帖子时发现了这个问题)。似乎 MvcContribs 自定义 impl 在您使用视图时很有用,我在这个项目中没有使用。
【解决方案2】:

我认为你需要为 json 设置允许获取:

return Json(data, JsonRequestBehavior.AllowGet)

【讨论】:

  • 我在与我的应用程序相同的项目中使用了该区域。您将需要这两个答案的组合。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多