2013-11-11 8 views
0

Я создал новый проект MVC. Я создал пустой контроллер под названием APIController:Простой маршрут MVC не работает

public class APIController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult Test() 
    { 
     return View(); 
    } 
} 

Я создал соответствующие представления, которые пусты, кроме слова «индекс» и «тест».

Когда я иду в myurl.com/Account работает

Когда я иду в myurl.com/Account/Test я получаю ошибку XML говоря:

Нет HTTP ресурс не найден, который совпадает с запросом URI [...]

Не найдено ни одного типа, который бы соответствовал контроллеру с именем «Учетная запись».

Это должно быть ошибка noob. Все остальное в проекте по умолчанию. Метод RegisterRoutes по умолчанию:

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

Какая глупая вещь, которую я пропускаю?

Бонусные баллы, если вы можете объяснить, почему ошибка ошибка XML, а не стандартный желтый экран смерти ...

+0

Какую версию MVC вы используете? Я выполнил ваши шаги, для MVC 3 и 4, точно, без ошибок. –

+0

MVC 4. Я буду писать точный код, даже если все основные значения по умолчанию – NibblyPig

+1

Является ли это 'APIController' опечаткой? Вы имели в виду 'AccountController'? –

ответ

0

Вы можете проверить, если контроллер вы создали, наследуя ApiController вместо стандартного Controller?

Это также объясняет, почему сообщение об ошибке возвращается в XML.

+0

Я наследую Контроллер, поскольку я создаю веб-сайт, а не API. Это верно? – NibblyPig

+0

Да, это то, что вы наследуете для веб-сайта. Но на основе этого URL-адреса: http://www.c-sharpcorner.com/Blogs/12001/no-http-resource-was-found-that-matches-the-request-uri-in-m.aspx вы получите XML, если наследуется от ApiController. Очень похоже на описанную вами проблему. –

+1

Если вы наследуете ApiController, вы не сможете выполнить 'return View(), т.е. код даже не компилирует –

2

Проблема решена.

Выключается, если вы вызываете ваш контроллер APIController MVC обрабатывает его совершенно по-другому. Переименование его в ABCController отлично поработало.

Я не пишу API, я пишу веб-сайт, который управляет API!

Argh, спасибо MVC!

+0

+1 Это интересно, это должно быть похоже на скрытое использование стандартного контроллера до того, как они представил «ApiController». – James

+0

@James Я уверен, что он делает это и для других типов. Я уверен, что в прошлом я сталкивался с чем-то подобным. –

+0

Подумайте об этом, так как есть класс ApiController, вызывающий ваш контроллер APIController, вероятно, не самая умная вещь ... – NibblyPig

Смежные вопросы