ASP.NET MVC]路由匹配但控制器从未调用过。 - > 404

时间:2011-11-24 10:36:44

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

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

我的路线匹配,但永远不会调用控制器,而是出现404错误。

我已经为2个项目设置了MVC3解决方案:

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

ProjectSetup

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

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错误。

有什么想法吗?

谢谢, - 杰里米

编辑:以下是路线匹配的证据:

enter image description here

找到解决方案

总结一下。 我的AreaRegistration继承类与我的控制器不在同一名称空间中。 由于我没有任何观点(它只是一个宁静的websvc)我没有必要使用MvcContribs,当你在不同项目中拥有视图和控制器而不是主站点时,它似乎很有用。

希望如果你提出这个问题,这会有所帮助;)

2 个答案:

答案 0 :(得分:4)

除非您使用的是MvcContribs便携式区域或其他自定义实现,否则您的区域将在默认情况下无法正常工作

答案 1 :(得分:0)

我认为你需要为json设置allow get:

return Json(data, JsonRequestBehavior.AllowGet)