Вопрос

У меня есть следующее в моем Global.asax.cs

routes.MapRoute(
    "Arrival",
    "{partnerID}",
    new { controller = "Search", action = "Index", partnerID="1000" }
);

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = "" }
);

Мой SearchController выглядит следующим образом

public class SearchController : Controller
{
    // Display search results
    public ActionResult Index(int partnerID)
    {
        ViewData["partnerID"] = partnerID;
        return View();
    }
}

и Index.aspx просто показывает ViewData [" partnerID "] в данный момент.

У меня есть виртуальный каталог, настроенный в IIS в Windows XP, который называется Test.

Если я укажу свой браузер на http: // localhost / Test / , я получу 1000, как и ожидалось. Однако, если я попытаюсь http: // localhost / Test / 1000 , я получу сообщение об ошибке "страница не найдена". Есть идеи?

Есть ли какие-то особые соображения по поводу запуска MVC в виртуальном каталоге?

Это было полезно?

Решение

IIS 5.1 интерпретирует ваш URL так, что он ищет папку с именем 1000 в папке с именем Test. Почему это так?

  

Это происходит потому, что только IIS 6   вызывает ASP.NET, когда он видит   & # 8220; расширение файла & # 8221; в URL-адресе, который & # 8217;   сопоставлен с aspnet_isapi.dll (который является   C / C ++ ISAPI фильтр отвечает за   вызывая ASP.NET). Так как маршрутизация является   .NET IHttpModule вызывается   Модуль UrlRoutingModule не может быть получен   вызывается, если ASP.NET сам не получает   вызывается, что происходит только тогда, когда   aspnet_isapi.dll вызывается, который   происходит только тогда, когда есть .aspx в   URL. Итак, нет. ASPX, нет   UrlRoutingModule, следовательно, 404.

Самое простое решение:

  

Если вы не возражаете, если у вас есть .aspx   URL, просто пройдите свою маршрутизацию   конфиг, добавив .aspx перед   косая черта в каждом шаблоне. За   пример, использовать   {controller} .aspx / {action} / {id} или   myapp.aspx / {контроллер} / {действие} / {ID}.   Не кладите .aspx внутрь   имена параметров в фигурных скобках или в   & # 8216; default & # 8217; значения, потому что это не & # 8217; т   действительно часть имени контроллера -   это просто в URL, чтобы удовлетворить IIS.

Источник: http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/

Другие советы

Если вы делаете это в Windows XP, то вы используете IIS 5.1. Вам нужно получить ASP.Net для обработки вашего запроса. Вам нужно либо добавить расширение к вашим маршрутам ({controller} .mvc / {action} / {id}) и сопоставить это расширение с ASP.Net, либо сопоставить все запросы с ASP.Net. http: // localhost / Test работает, потому что он идет к Default.aspx, который обрабатывается специально в проектах MVC.

Кроме того, вам нужно указать http: // localhost / Test / Search / Index / 1000 . Контроллер и части действий не являются обязательными, если вы хотите указать идентификатор.

При использовании виртуальных каталогов в вашем приложении есть ряд соображений.

Один из них заключается в том, что большинство браузеров не будут отправлять файлы cookie, полученные из одного виртуального каталога в другой, даже если приложения находятся на одном сервере.

Попробуйте установить виртуальный путь: щелкните правой кнопкой мыши на проекте MVC, свойства, веб-вкладку, там введите соответствующее местоположение.

scroll top