Почему я не могу заставить MvcHttpHandler обрабатывать мои запросы .mvc? - PullRequest
0 голосов
/ 08 октября 2010

У меня есть проект, использующий Asp.Net 3.5 и MVC 1.

Все отлично работает на моем локальном IIS, но не после того, как я развернул его на размещенном сервере.

Веб-серверIIS7 с интегрированным конвейером активирован (в соответствии с хостинговой компанией).

Когда я захожу в корневой каталог веб-сайта www.site.com, default.aspx выполняет перенаправление на контроллер следующим образом:

public void Page_Load (отправитель объекта, System.EventArgs e)
{
string originalPath = Request.Path;
HttpContext.Current.RewritePath (Request.ApplicationPath + "Controller.mvc /Действие ", false);
IHttpHandler httpHandler = new MvcHttpHandler ();
httpHandler.ProcessRequest (HttpContext.Current);
HttpContext.Current.RewritePath (originalPath, false);

} *

Это работает, и отображается правильный вид.Однако, когда я набираю тот же адрес в браузере, www.site.com/Controller.mvc/Action, я получаю ошибку 404.0.Таким образом, кажется, MvccHttpHandler не вызывается правильно (?).

Файл web.config настроен с помощью runAllManagedModulesForAllRequests = "true", а MvcHttpHandler настроен для обработки расширений .mvc.

Что я делаю не так, есть идеи?

Ответы [ 2 ]

3 голосов
/ 08 октября 2010

Вот хорошая статья , которая охватывает различные сценарии развертывания. При развертывании в IIS 7 в интегрированном режиме особых действий не требуется. Вам не нужен файл default.aspx и ассоциация MvcHttpHandler с расширением .mvc в вашем web.config. Вот как могут выглядеть ваши маршруты, если вы хотите обрабатывать как маршруты без расширений в IIS 7.0, так и расширение .mvc в IIS 6.0.

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

// This is for IIS 6.0
routes.MapRoute(
    "DefaultWithExtension",
    "{controller}.mvc/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

// The default extensionless route working with IIS 7.0 and higher
routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

Расширение .mvc требуется только для IIS 6.0:

<httpHandlers>
    <add verb="*" path="*.mvc" validate="false" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpHandlers>
1 голос
/ 10 октября 2010

Оказалось, что моя хостинговая компания не запустила мое приложение в интегрированном режиме, хотя мне и сказали.Решил мои проблемы, но я также получил несколько полезных советов от Дарина.

...