ASP.NET MVC] Маршрут совпадает, но контроллер никогда не вызывается.-> 404 - PullRequest
2 голосов
/ 24 ноября 2011

Привет всем У меня есть проблема с маршрутизацией MVC3 и областями:

Мой маршрут совпадает, но контроллер никогда не вызывается, вместо этого я получаю ошибку 404.

Я установил решение MVC3с 2 проектами:

  • Один из них является основным проектом 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 ]

4 голосов
/ 24 ноября 2011

Ваша область находится в другом проекте, который не будет работать по умолчанию, если вы не используете переносимые области MvcContribs или другую пользовательскую реализацию

0 голосов
/ 24 ноября 2011

Я думаю, вам нужно установить разрешение get для json:

return Json(data, JsonRequestBehavior.AllowGet)
...