Вопрос

Где я могу найти несколько полезных советов по передовым методам работы ASP.NET MVC на IIS6?

Я еще не видел реалистичных вариантов для веб-хостов, которые предоставляют IIS7-хостинг. Главным образом потому, что я не живу в США.

Поэтому мне было интересно узнать, как лучше всего создавать приложения в ASP.NET MVC и сделать его легко доступным для развертывания как на IIS6, так и на IIS7. Имейте в виду, что это для стандартных веб-хостов, поэтому нет доступа к ISAPI-фильтрам или специальным настройкам внутри IIS6.

Есть ли что-то еще, о чем следует подумать при разработке MVC-приложений ASP.NET для IIS6? Какие-нибудь функции, которые не работают?

ОБНОВЛЕНИЕ: одна из самых больших проблем связана с маршрутами. Шаблон {controller} / {action} будет работать на IIS7, но не на IIS6, для которого требуется {controller} .mvc / {action}. Так как мне сделать это прозрачным? Опять же, нет ISAPI и нет настроек IIS , пожалуйста.

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

Решение

Это заняло у меня немного времени, но я понял, как заставить расширения работать с IIS 6. Во-первых, вам нужно переделать базовую маршрутизацию, включив в нее .aspx, чтобы они направлялись через фильтр ASP.NET ISAPI.

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

Если вы, например, перейдете на Home.aspx, ваш сайт должен работать нормально. Но Default.aspx и адрес страницы по умолчанию http: // [website] / перестают работать правильно. Так как это исправить?

Ну, вам нужно определить второй маршрут. К сожалению, использование Default.aspx в качестве маршрута не работает должным образом:

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

Так как же заставить это работать? Ну, вот где вам нужен оригинальный код маршрутизации:

routes.MapRoute(
    "Default2",                                             // Route name
    "{controller}/{action}/{id}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);

Когда вы сделаете это, Default.aspx и http: // [website] / оба снова начнут работать, Я думаю, потому что они стали успешно отображены обратно в контроллер Home. Итак, полное решение:

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

        routes.MapRoute(
            "Default2",                                              // Route name
            "{controller}/{action}/{id}",                            // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );
    }

    protected void Application_Start()
    {
        RegisterRoutes(RouteTable.Routes);
    }
}

И ваш сайт должен начать нормально работать в IIS 6. (По крайней мере, на моем ПК).

И в качестве бонуса, если вы используете Html.ActionLink () на своих страницах, вам не нужно менять никакую другую строку кода на всем сайте. Этот метод заботится о том, чтобы правильно пометить расширение .aspx на контроллере.

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

Поскольку вы не можете изменить настройки IIS для сопоставления .mvc с ASP.Net, вы можете использовать другое расширение, которое уже сопоставлено с ASP.Net. Например, вы можете использовать {controller} .ashx / {action}, и это должно работать из коробки на IIS 6.

Вам не нужно мириться с этим расширением, если вы можете установить фильтр ISAPI на сервере.

По сути, вы направляете совпавшие URL-адреса в разновидность {controller} .mvc, затем в ASP.NET вы переписываете этот URL-адрес, чтобы удалить .mvc - для этого вам не нужно определять дополнительные маршруты или предоставлять .mvc вашему пользователей.

Я написал об этом здесь: http://www.flux88.com/UsingASPNETMVCOnIIS6WithoutTheMVCExtension.aspx

и у Стива Сандерсона также есть хороший пост: http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/

Как уже упоминалось в этом сообщение в блоге Фила Хака, можно настроить URL-адреса без расширений для ASP.NET MVC в IIS 6, используя сопоставления с подстановочными знаками приложений :

<Ол>
  • В IIS 6 перейдите в Свойства конфигурации приложения для своего веб-приложения ASP.NET MVC.
  • Нажмите " Вставить ... " в разделе карт приложения Wildcard.
  • Установите для исполняемого файла путь aspnet_isapi.dll (на моей машине это c: \ windows \ microsoft.net \ framework \ v2.0.50727 \ aspnet_isapi.dll).
  • Убедитесь, что НЕ проверили " Убедитесь, что файл существует " и нажмите "ОК".
  • Однако, как уже упоминал Хак, это может сказаться на производительности.

    У меня есть пример приложения на IIS6.

    Я нашел быстрое и грязное решение. (Грязный, потому что он содержит имя представления по умолчанию с расширением). Он не требует дополнительного маршрута или чего-то особенного. (За исключением того, что ваш маршрут по умолчанию должен иметь формат {controller} .aspx / {action} ...)

    Здесь default.aspx

    <%@ Page Language="C#"%>
    <script runat="server">
    protected void Page_Load(object sender, EventArgs e)
    {
        HttpContext.Current.RewritePath("~/Home.aspx/index");
        IHttpHandler httpHandler = new MvcHttpHandler();
        httpHandler.ProcessRequest(HttpContext.Current);
    }
    </script>
    

    Действие моего примера приложения по умолчанию было index в Домашнем каталоге.

    Примечание. Я видел этот код в блоге Фила Хаака. Спасибо Брайану Лоу.

    У меня есть подробное пошаговое руководство, но оно требует использования isapi_rewrite. Просмотрите его по адресу: http://biasecurities.com/blog/2008/how-to-enable-pretty-urls-with-asp-net-mvc-and-iis6/

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top