Индекс контроллера MVC иногда 404? - PullRequest
5 голосов
/ 13 июля 2011

Я добавил 3 контроллера, и для одного из них представление индекса по умолчанию не работает.

Works(shows index):
http://localhost:1767/Employees/  
http://localhost:1767/Employees/Index
http://localhost:1767/Home/       
http://localhost:1767/Home/Index
http://localhost:1767/
http://localhost:1767/Companies/Index

Doesn't work(gives 404 error):
http://localhost:1767/Companies/  

1) Я создал библиотеку классов платформы сущностей, сгенерированную из базы данных, содержащей таблицу Employees and Companies.

2) Создан пустой проект MVC 3.

3) Добавлена ​​ссылка на проект из проекта MVC в проект библиотеки классов EF.

4) Добавлен контроллер, и в диалоге добавления контроллера я выбрал модель EF и одну из таблиц и назвал контроллер CompaniesController

5) Потом я вспомнил, что мне нужен HomeController, поэтому я добавил еще один контроллер, назвав его HomeController, и снова выбрал объект Companies.

6) Наконец, я добавил EmployeesController, выбрав сущность Employees.

Это единственный маршрут в моем Global.asax.cs:

routes.MapRoute(
          "Default", // Route name
          "{controller}/{action}/{id}", // URL with parameters
          new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults

Почему URL http://localhost:1767/Companies/ не используется по умолчанию для действия индекса, как все остальные контроллеры? Я выполнил несколько практических проектов MVC и, похоже, всегда сталкиваюсь с этой проблемой. Контроллер Employees, установленный по умолчанию на Index, работает нормально, даже если нет маршрута, который предписывает ему это делать?

Редактировать: вот ошибка, которую я получаю:

The resource cannot be found.
Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly.

Requested URL: /Companies/

Редактировать: Поэтому я обычно не раскрываю имена своих сущностей или сведения о домене при публикации примеров в Интернете, но в этом случае Компании действительно называли Свойствами, и изменение имени на Свойства2 для папки представления и контроллера устранило проблему , Таким образом, кажется, что Properties - это специальное ключевое слово, которое нарушает значение по умолчанию Index, если оно появляется в URL

Ответы [ 4 ]

5 голосов
/ 14 июля 2011

Изменена папка представления и контроллер с Properties (Controller) на Properties2 (Controller), и теперь он работает нормально.По-видимому, «Свойства» имеет некоторую специальную обработку в URL и нарушает значение по умолчанию для индекса

3 голосов
/ 16 апреля 2014

Я получил 403.1, потому что у меня было имя папки, совпадающее с именем контроллера в корневом каталоге веб-проекта.Таким образом, даже прежде, чем он достигнет разрешения маршрута MVC, он не сможет составить список содержимого папки.Может быть похожая проблема со свойствами, являющимися стандартной папкой в ​​любом проекте

3 голосов
/ 13 июля 2011

Вы добавили действие Index в свой CompaniesController?

[HttpGet]
public ActionResult Index()
{
    return View();
}
2 голосов
/ 13 июля 2011

Есть ли у вас индексный вид в папках видов в разделе «Компании»?то есть Views / Companies / Index.aspx?

Единственная причина, по которой я вижу, что он не работает (основываясь на предоставленной информации), была из-за орфографической ошибки, контроллер Companies не наследовал от контроллера или не реализовывал интерфейс IController.или представление отсутствует в папке Views / Controller для действия Index.

Отредактировано: я бы ожидал, что CompaniesController будет выглядеть следующим образом:

namespace MyProject.Controllers

public class CompaniesController : Controller
{
     [HttpGet]
     public ActionResult Index() {
         return View();
     }
}

И он будет постоянно находитьсяв папке «Контроллеры» вашего проекта.

...