У меня есть контроллер с 2-мя действиями, каждое из которых возвращает ответ от действия Index после установки заданного параметра.
public ActionResult Index(int? pageType)
{
// Do something based on the pageType
return View();
}
public ActionResult Guides()
{
return Index(1);
}
public ActionResult Discussions()
{
return Index(2);
}
Причина, по которой я это делаю, состоит в том, чтобы сделать URL-адрес немного чище, не мешая тожево многом с маршрутизацией (установка маршрута для принятия типа страницы в качестве строкового параметра может привести к путанице с отображением действий контроллера, и я хотел, чтобы URL отображал тип страницы)
Просто чтобы перепутать вещи, я динамически проверяюдля сопоставления, основанного на параметре pageType, и использую его, в противном случае я придерживаюсь представления «Индекс» по умолчанию.Я использую стандартное отображение маршрутов, чтобы поймать это.
Как это часто бывает, все это прекрасно работает локально.Проблема возникает при доступе к URL на веб-сервере.Когда я перехожу к действию «Руководства», все работает нормально, однако при переходе к действию «Обсуждения» возвращается значение 404. Странно то, что доступ к одному и тому же URL-адресу в браузере на самом сервере работает нормально!
Он работает на Windows Server 2008 R2 (IIS7) с установленным пулом приложений «Интегрировано».Это также MVC 3 в .Net 4.
Кто-нибудь видел что-то подобное раньше или есть идеи, как поставить диагноз?Я не уверен, куда идти отсюда ...
РЕДАКТИРОВАТЬ:
ОК, поэтому для краткости я пропустил некоторые вещи, которые я не считаю актуальнымикак я ошибался ...
В дополнение к параметру pageType есть еще и необязательная категория.Это проверяет, что категория существует в БД, и добавляет ее в модель представления.
В представлении существует вызов @Html.RenderAction, который отправляет идентификатор категории в другой метод действия.Я не уверен, почему я сделал это так, вместо того, чтобы просто позвонить @Html.Partial и передать модель, но эй.В любом случае, если категория не была найдена, этот метод действия вернул результат HttpNotFound , следовательно, 404.
Я просто изменил метод действия 'child', чтобы он возвращал частичное представление, используя пустой объекткак модель (новый пустой список в моем случае), и это решило проблему.
Потребовалось немного покопаться, но я попал туда в конце, в будущем я обязательно буду использовать RenderAction только тогда, когдаМне действительно нужно выполнить дополнительную обработку действий, которую нельзя выполнить в начальном действии контроллера.
Конечно, это не помогает объяснить, почему это работало при локальном доступе на сервере.Я думаю, это должно быть связано с результатом HttpNotFound .