Совместим ли ASP.NET Пересылка MVC 1 с ASP.NET MVC 2?
-
18-09-2019 - |
Вопрос
Могу ли я запустить приложение MVC 1, используя сборки MVC 2, без сбоев?Я понимаю, что в некоторых сторонних инструментах что-то было сломано в MVC 2, но давайте предположим, что я не использую эти другие инструменты.
Решение
Там были кардинальные изменения.
Если вы хотите, чтобы проект 1.0 запускался на версии 2.0, он действительно ищет вещи в разных местах; таким образом, вам придется перенести приложение на версию 2.0..
Вот изменения, которые, возможно, могут "сломаться" (текущие на момент предварительного просмотра 2):
Изменения в предварительном просмотре 2
Помощники теперь возвращают MvcHtmlString
объект
Чтобы воспользоваться преимуществами нового синтаксиса выражения в HTML-кодировке в ASP.NET 4, возвращаемый тип помощников HTML теперь MvcHtmlString
вместо того , чтобы string
.Обратите внимание, что если вы используете ASP.NET MVC 2 и новые помощники с ASP.NET 3.5, вы не сможете воспользоваться преимуществами синтаксиса HTML-кодирования;новый синтаксис доступен только при запуске ASP.NET MVC 2 на ASP.NET 4.
JsonResult
теперь отвечает только на HTTP POST запросы
Чтобы смягчить атаки с перехватом JSON, которые потенциально могут привести к раскрытию информации, по умолчанию JsonResult
класс теперь реагирует только на HTTP POST
Запросы.AJAX ПОЛУЧАЕТ вызовы методов action, которые возвращают JsonResult
объект должен быть изменен, чтобы вместо него использовать POST .При необходимости вы можете переопределить это поведение, установив новый JsonRequestBehavior
свойство JsonResult
.Для получения дополнительной информации о потенциальном эксплойте смотрите запись JSON Hijacking в блоге Фила Хаака.
Установщики свойств Model и ModelType на ModelBindingContext
являются устаревшими
Новая настраиваемая ModelMetadata
свойство было добавлено в ModelBindingContext
класс.Новое свойство инкапсулирует как модель, так и ModelType
свойства.Хотя в Model
и ModelType
свойства устарели, для обратной совместимости средства получения свойств все еще работают;они делегируют полномочия в ModelMetadata
свойство для извлечения значения.
Изменения в предварительном просмотре 1
DefaultControllerFactory
изменения класса нарушают работу пользовательских фабрик контроллеров, которые являются производными от него
Это изменение влияет на фабрики пользовательских контроллеров, которые являются производными от DefaultControllerFactory
.Класс DefaultControllerFactory был исправлен путем удаления RequestContext
свойство и вместо этого передает экземпляр контекста запроса защищенным виртуальным методам GetControllerInstance
и GetControllerType
.
Фабрики пользовательских контроллеров часто используются для обеспечения внедрения зависимостей для ASP.NET Приложений MVC.
Чтобы обновить фабрики пользовательских контроллеров для поддержки ASP.NET MVC 2, измените сигнатуру метода или сигнатуры, чтобы они соответствовали новым сигнатурам, и используйте параметр контекста запроса вместо свойства.
“Area” - это теперь зарезервированный ключ значения маршрута
Строка “area” в значениях маршрута теперь имеет особое значение в ASP.NET MVC, точно так же, как это делают “controller” и “action”.Одним из следствий является то, что если помощникам HTML предоставить словарь значений маршрута, содержащий “area”, помощники больше не будут добавлять “area” в строку запроса.
Если вы используете функцию "Области", убедитесь, что не используете {area}
как часть URL-адреса вашего маршрута.
Известные проблемы
Диалоговое окно Добавить представление выдает исключение NullReferenceException, когда установлен флажок Создать строго типизированное представление, выбрано содержимое представления, отличное от “Пустого”, и указано имя типа класса данных представления для типа, который действительно существует.При указании имени типа либо используйте выпадающий список для выбора имени типа, либо введите полное имя типа.Для типов, которые не существуют, вы должны установить для содержимого просмотра значение “Пустой”.
Другие советы
Ознакомьтесь с этим документом.Вы узнаете о кардинальных изменениях :http://go.microsoft.com/fwlink/?LinkID=157072
Одна ошибка, которая меня зацепила, заключается в том, что все поля модели теперь всегда проверяются в сообщении.
Изменения описаны Брэдом Уилсоном здесь.
Запись в блоге Стива Андерсона описывает проблему и мое любимое решение (с использованием пользовательского средства проверки).