Новые возможности ASP.NET MVC 5.2
В этом разделе описываются новые возможности ASP.NET MVC 5.2, Microsoft.AspNet.MVC 5.2.2 и ASP.NET MVC 5.2.3 Beta
Требования к программному обеспечению
- Visual Studio 2012: скачайте ASP.NET and Web Tools 2013.1 для Visual Studio 2012.
- Visual Studio 2013: скачайте обновление Visual Studio 2013 или более поздней версии. Это обновление необходимо для редактирования ASP.NET представлений MVC 5.2 Razor.
Скачать
Функции среды выполнения выпускаются в виде пакетов NuGet в коллекции NuGet. Все пакеты среды выполнения соответствуют спецификации семантического управления версиями . Последняя версия пакета ASP.NET MVC 5.2 имеет следующую версию: "5.2.0". Эти пакеты можно установить или обновить с помощью NuGet. Выпуск также включает соответствующие локализованные пакеты в NuGet.
Вы можете установить или обновить выпущенные пакеты NuGet с помощью консоли диспетчера пакетов NuGet:
Install-Package Microsoft.AspNet.Mvc —версия 5.2.0
Документация
Руководства и другие сведения о ASP.NET MVC 5.2 доступны на веб-сайте ASP.NET (https://www.asp.net/mvc).
Новые возможности в ASP.NET MVC 5.2
Улучшения маршрутизации атрибутов
Маршрутизация атрибутов теперь предоставляет точку расширяемости IDirectRouteProvider, которая позволяет полностью контролировать обнаружение и настройку маршрутов атрибутов. IDirectRouteProvider отвечает за предоставление списка действий и контроллеров вместе со связанными сведениями о маршруте, чтобы указать, какая именно конфигурация маршрутизации требуется для этих действий. Реализация IDirectRouteProvider может быть указана при вызове MapAttributes/MapHttpAttributeRoutes.
Настроить IDirectRouteProvider будет проще всего, расширив реализацию по умолчанию DefaultDirectRouteProvider. Этот класс предоставляет отдельные переопределяемые виртуальные методы для изменения логики обнаружения атрибутов, создания записей маршрута и обнаружения префикса маршрута и префикса области.
Благодаря новой расширяемости маршрутизации атрибутов IDirectRouteProvider пользователь может сделать следующее:
Поддержка наследования маршрутов атрибутов. Например, в следующем сценарии контроллеры Блога и Store используют соглашение о маршрутизации атрибутов, определенное BaseController.
[InheritedRoute("attributerouting/{controller}/{action=Index}/{id?}")] public abstract class BaseController : Controller { } public class BlogController : BaseController { public string Index() { return "Hello from blog!"; } } public class StoreController : BaseController { public string Index() { return "Hello from store!"; } } [AttributeUsage(AttributeTargets.Class, Inherited=true, AllowMultiple=true)] public class InheritedRouteAttribute : Attribute, IDirectRouteFactory { public InheritedRouteAttribute(string template) { Template=template; } public string Name { get; set; } public int Order { get; set; } public string Template { get; private set; } public new RouteEntry CreateRoute(DirectRouteFactoryContext context) { // context.Actions will always contain at least one action - and all of the // actions will always belong to the same controller. var controllerDescriptor=context.Actions.First().ControllerDescriptor; var template=Template.Replace("{controller}", controllerDescriptor.ControllerName); IDirectRouteBuilder builder=context.CreateBuilder(template); builder.Name=Name; builder.Order=Order; return builder.Build(); } } // Custom direct route provider which looks for route attributes of type // InheritedRouteAttribute and also supports attribute route inheritance. public class InheritedDirectRouteProvider : DefaultDirectRouteProvider { protected override IReadOnlyList<IDirectRouteFactory> GetControllerRouteFactories(ControllerDescriptor controllerDescriptor) { return controllerDescriptor .GetCustomAttributes(typeof(InheritedRouteAttribute), inherit: true) .Cast<IDirectRouteFactory>() .ToArray(); } }
Автоматическое создание имен маршрутов для маршрутов атрибутов.
protected override IReadOnlyList<IDirectRouteFactory> GetActionRouteFactories(ActionDescriptor actionDescriptor) { // Get all the route attributes decorated directly on the actions IReadOnlyList<IDirectRouteFactory> actionRouteFactories=base.GetActionRouteFactories(actionDescriptor); // Check if the route attribute on each action already has a route name and if no, // generate a route name automatically // based on the convention: <ControllerName>_<ActionName> (ex: Customers_GetById) foreach (IDirectRouteFactory routeFactory in actionRouteFactories) { RouteAttribute routeAttr=routeFactory as RouteAttribute; if (string.IsNullOrEmpty(routeAttr.Name)) { routeAttr.Name=actionDescriptor.ControllerDescriptor.ControllerName + "_" + actionDescriptor.ActionName; } } return actionRouteFactories; } protected override IReadOnlyList<IDirectRouteFactory> GetControllerRouteFactories(ControllerDescriptor controllerDescriptor) { // Get all the route attributes decorated directly on the controllers IReadOnlyList<IDirectRouteFactory> controllerRouteFactories=base.GetControllerRouteFactories(controllerDescriptor); // Check if the route attribute on each controller already has a route name and if no, // generate a route name automatically // based on the convention: <ControllerName>Route (ex: CustomersRoute) foreach (IDirectRouteFactory routeFactory in controllerRouteFactories) { RouteAttribute routeAttr=routeFactory as RouteAttribute; if (string.IsNullOrEmpty(routeAttr.Name)) { routeAttr.Name=controllerDescriptor.ControllerName + "Route"; } } return controllerRouteFactories; }
Измените префиксы маршрутов в одном центральном месте перед добавлением маршрутов в таблицу маршрутов.
Отфильтруйте контроллеры, на которых будет искать маршрутизация атрибутов. Мы надеемся, что блог на 3 и 4 в ближайшее время.
Facebook исправлений для измененной поверхности API
Пакет Facebook MVC был нарушен из-за нескольких изменений API, внесенных Facebook. Мы также выпускаем новый пакет Facebook (Microsoft.AspNet.Facebook 1.0.0), чтобы устранить эти проблемы.
Известные проблемы и критические изменения
Формирование шаблонов MVC/Web API в проект с пакетами 5.2.0 приводит к тому, что пакеты версии 5.1.2 для тех, которые еще не существуют в проекте
Обновление пакетов NuGet для ASP.NET MVC 5.2.0 не обновляет средства Visual Studio, такие как ASP.NET формирование шаблонов или шаблон проекта веб-приложения ASP.NET. Они используют предыдущую версию пакетов среды выполнения ASP.NET (например, 5.1.2 в обновлении 2). В результате ASP.NET формирования шаблонов установит предыдущую версию (например, 5.1.2 в обновлении 2) необходимых пакетов, если они еще не доступны в ваших проектах. Однако ASP.NET формирования шаблонов в Visual Studio 2013 RTM или обновлении 1 не перезаписывают последние пакеты в проектах. Если вы используете ASP.NET формирования шаблонов после обновления пакетов проектов до веб-API 2.2 или ASP.NET MVC 5.2, убедитесь, что версии веб-API и ASP.NET MVC согласованы.
Не удается установить пакет NuGet Microsoft.jQuery.Unobtrusive.Validation, так как не удается найти версию Microsoft.jQuery.Unobtrusive.Validation, совместимую с jQuery 1.4.1
Для Microsoft.jQuery.Unobtrusive.Validation требуется jQuery >=1.8 и jQuery.Validation >=1.8. Но для jQuery.Validation (1.8) требуется jQuery (≥ 1.3.2 && ≤ 1.6). Из-за этого, когда NuGet устанавливает JQuery 1.8 и jQuery.Validation 1.8 одновременно, происходит сбой. При возникновении этой проблемы можно просто обновить версию jQuery.Validation до >= 1.8.0.1 с исправленным ограничением jQuery. Вы сможете установить Microsoft.jQuery.Unobtrusive.Validation.
Jquery. Пакет NuGet для проверки версии 1.13.0 не распознает некоторые международные адреса электронной почты
Пакет nuget jQuery.Validation версии 1.11.1 является последней известной версией, которая распознает следующие допустимые адреса электронной почты. Все более поздние версии могут не распознать их. Пример:
Стандарт интернационализации адресов электронной почты (EAI) (например, 用户@domain.com)
EAI + международные идентификаторы ресурсов (IRIs) (например, 用户@домен.рф)
О проблеме сообщается по адресу https://github.com/jzaefferer/jquery-validation/issues/1222
Выделение синтаксиса для представлений Razor в Visual Studio 2013
При обновлении до ASP.NET MVC 5.2 без обновления Visual Studio 2013 вы не получите поддержку редактора Visual Studio для выделения синтаксиса при редактировании представлений Razor. Чтобы получить эту поддержку, необходимо обновить Visual Studio 2013.