Partager via


Nouveautés de ASP.NET MVC 5.2

par Microsoft

Cette rubrique décrit les nouveautés de ASP.NET MVC 5.2, Microsoft.AspNet.MVC 5.2.2 et ASP.NET MVC 5.2.3 bêta

Configuration logicielle

Télécharger

Les fonctionnalités d’exécution sont publiées sous forme de packages NuGet sur la galerie NuGet. Tous les packages d’exécution suivent la spécification du contrôle de version sémantique . La dernière ASP.NET package MVC 5.2 a la version suivante : « 5.2.0 ». Vous pouvez installer ou mettre à jour ces packages via NuGet. La version inclut également les packages localisés correspondants sur NuGet.

Vous pouvez installer ou mettre à jour les packages NuGet publiés à l’aide de la console du Gestionnaire de package NuGet :

Install-Package Microsoft.AspNet.Mvc -Version 5.2.0

Documentation

Des tutoriels et d’autres informations sur ASP.NET MVC 5.2 sont disponibles sur le site web ASP.NET (https://www.asp.net/mvc).

Nouvelles fonctionnalités de ASP.NET MVC 5.2

Améliorations du routage des attributs

Le routage d’attributs fournit désormais un point d’extensibilité appelé IDirectRouteProvider, qui permet un contrôle total sur la façon dont les routes d’attributs sont découvertes et configurées. Un IDirectRouteProvider est chargé de fournir une liste d’actions et de contrôleurs, ainsi que les informations d’itinéraire associées pour spécifier exactement la configuration de routage souhaitée pour ces actions. Une implémentation IDirectRouteProvider peut être spécifiée lors de l’appel de MapAttributes/MapHttpAttributeRoutes.

La personnalisation d’IDirectRouteProvider sera plus simple en étendant notre implémentation par défaut, DefaultDirectRouteProvider. Cette classe fournit des méthodes virtuelles substituables distinctes pour modifier la logique de découverte des attributs, de création d’entrées de route et de découverte du préfixe de route et du préfixe de zone.

Avec la nouvelle extensibilité de routage d’attribut de IDirectRouteProvider, un utilisateur peut effectuer les opérations suivantes :

  1. Prise en charge de l’héritage des itinéraires d’attributs. Par exemple, dans le scénario suivant, les contrôleurs Blog et Store utilisent une convention d’itinéraire d’attribut définie par 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();
        }
    }
    
  2. Générer automatiquement des noms d’itinéraires pour les itinéraires d’attributs.

    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. Modifiez les préfixes d’itinéraire dans un emplacement central avant que les itinéraires ne sont ajoutés à la table de routage.

  4. Filtrez les contrôleurs sur lesquels vous souhaitez que le routage d’attributs recherche. Nous espérons bloguer sur 3 et 4 bientôt.

Facebook correctifs pour la surface d’API modifiée

Le package Facebook MVC a été interrompu en raison de quelques modifications apportées à l’API par Facebook. Nous publions également un nouveau package Facebook (Microsoft.AspNet.Facebook 1.0.0) pour résoudre ces problèmes.

Problèmes connus et changements cassants

Générer une génération automatique de l’API MVC/Web dans un projet avec des packages 5.2.0 entraîne la création de packages 5.1.2 pour ceux qui n’existent pas déjà dans le projet

La mise à jour des packages NuGet pour ASP.NET MVC 5.2.0 ne met pas à jour les outils Visual Studio tels que ASP.NET la génération automatique ou le modèle de projet d’application web ASP.NET. Ils utilisent la version précédente des packages d’exécution ASP.NET (par exemple, 5.1.2 dans Update 2). Par conséquent, la ASP.NET la génération automatique installe la version précédente (par exemple, 5.1.2 dans Update 2) des packages requis, s’ils ne sont pas déjà disponibles dans vos projets. Toutefois, la ASP.NET la génération automatique dans Visual Studio 2013 RTM ou Update 1 ne remplace pas les derniers packages de vos projets. Si vous utilisez ASP.NET structure après la mise à jour des packages de vos projets vers l’API Web 2.2 ou ASP.NET MVC 5.2, assurez-vous que les versions de l’API web et de ASP.NET MVC sont cohérentes.

L’installation du package NuGet Microsoft.jQuery.Unobtrusive.Validation échoue, car elle ne parvient pas à trouver une version de Microsoft.jQuery.Unobtrusive.Validation compatible avec jQuery 1.4.1

Microsoft.jQuery.Unobtrusive.Validation nécessite jQuery >=1.8 et jQuery.Validation >=1.8. Toutefois, jQuery.Validation (1.8) a besoin de jQuery (≥ 1.3.2 && ≤ 1.6). Pour cette raison, lorsque NuGet installe JQuery 1.8 et jQuery.Validation 1.8 en même temps, il échoue. Lorsque vous voyez ce problème, vous pouvez simplement mettre à jour la version de jQuery.Validation vers >= 1.8.0.1 qui a la limite jQuery corrigée en premier. Vous devriez être en mesure d’installer Microsoft.jQuery.Unobtrusive.Validation.

Jquery. La validation du package Nuget version 1.13.0 ne reconnaît pas certaines adresses e-mail internationales

Le package nuget jQuery.Validation version 1.11.1 est la dernière version connue qui reconnaît les adresses e-mail valides suivantes. Les versions ultérieures peuvent ne pas être en mesure de les reconnaître. Par exemple :

Norme E-Mail Address Internationalization (EAI) (par exemple, 用户@domain.com)
IAE + Identificateurs de ressources internationalisés (IRIs) (par exemple, 用户@домен.рф)

Le problème est signalé à l’adresse https://github.com/jzaefferer/jquery-validation/issues/1222

Mise en surbrillance de la syntaxe pour les vues Razor dans Visual Studio 2013

Si vous effectuez une mise à jour vers ASP.NET MVC 5.2 sans mettre à jour Visual Studio 2013, vous ne bénéficierez pas de la prise en charge de l’éditeur Visual Studio pour la mise en surbrillance de la syntaxe lors de la modification des vues Razor. Vous devez mettre à jour Visual Studio 2013 pour obtenir ce support.