Novità di ASP.NET MVC 5.2
di Microsoft
Questo argomento descrive le novità di ASP.NET MVC 5.2, Microsoft.AspNet.MVC 5.2.2 e ASP.NET MVC 5.2.3 Beta
Requisiti software
- Visual Studio 2012: scaricare ASP.NET and Web Tools 2013.1 per Visual Studio 2012.
- Visual Studio 2013: scaricare Visual Studio 2013 Aggiornamento o versione successiva. Questo aggiornamento è necessario per la modifica ASP.NET MVC 5.2 Razor Views.
Scarica
Le funzionalità di runtime vengono rilasciate come pacchetti NuGet nella raccolta NuGet. Tutti i pacchetti di runtime seguono la specifica del controllo delle versioni semantiche . La versione più recente ASP.NET pacchetto MVC 5.2 è la seguente: "5.2.0". È possibile installare o aggiornare questi pacchetti tramite NuGet. La versione include anche i pacchetti localizzati corrispondenti in NuGet.
È possibile installare o aggiornare i pacchetti NuGet rilasciati usando la console di Gestione pacchetti NuGet:
Install-Package Microsoft.AspNet.Mvc -Version 5.2.0
Documentazione
Le esercitazioni e altre informazioni su ASP.NET MVC 5.2 sono disponibili nel sito Web ASP.NET (https://www.asp.net/mvc).
Nuove funzionalità in ASP.NET MVC 5.2
Miglioramenti del routing degli attributi
Il routing degli attributi fornisce ora un punto di estendibilità denominato IDirectRouteProvider, che consente il controllo completo sulla modalità di scoperta e configurazione delle route degli attributi. Un IDirectRouteProvider è responsabile di fornire un elenco di azioni e controller insieme alle informazioni sulla route associate per specificare esattamente la configurazione di routing desiderata per tali azioni. È possibile specificare un'implementazione IDirectRouteProvider quando si chiama MapAttributes/MapHttpAttributeRoutes.
La personalizzazione di IDirectRouteProvider sarà più semplice estendendo l'implementazione predefinita DefaultDirectRouteProvider. Questa classe fornisce metodi virtuali sostituibili separati per modificare la logica per l'individuazione degli attributi, la creazione di voci di route e l'individuazione del prefisso di route e del prefisso dell'area.
Con la nuova estendibilità del routing degli attributi di IDirectRouteProvider, un utente può eseguire le operazioni seguenti:
Supporto dell'ereditarietà delle route degli attributi. Ad esempio, nello scenario seguente i controller Blog e Store usano una convenzione di route degli attributi definita da 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(); } }
Generare automaticamente i nomi di route per le route degli attributi.
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; }
Modificare i prefissi di route in un'unica posizione centrale prima che le route vengano aggiunte alla tabella di route.
Filtrare i controller in cui si vuole cercare il routing degli attributi. Speriamo di blog su 3 e 4 presto.
Facebook correzioni per la superficie DELL'API modificata
Il pacchetto di Facebook MVC è stato interrotto a causa di alcune modifiche apportate dall'API Facebook. Verrà rilasciato anche un nuovo pacchetto di Facebook (Microsoft.AspNet.Facebook 1.0.0) per risolvere questi problemi.
Problemi noti e modifiche di rilievo
Lo scaffolding dell'API MVC/Web in un progetto con pacchetti 5.2.0 genera pacchetti 5.1.2 per quelli che non esistono già nel progetto
L'aggiornamento dei pacchetti NuGet per ASP.NET MVC 5.2.0 non aggiorna gli strumenti di Visual Studio, ad esempio ASP.NET lo scaffolding o il modello di progetto applicazione Web ASP.NET. Usano la versione precedente dei pacchetti di runtime ASP.NET ,ad esempio 5.1.2 nell'aggiornamento 2. Di conseguenza, il ASP.NET scaffolding installerà la versione precedente (ad esempio 5.1.2 nell'aggiornamento 2) dei pacchetti necessari, se non sono già disponibili nei progetti. Tuttavia, lo scaffolding ASP.NET in Visual Studio 2013 RTM o Update 1 non sovrascrive i pacchetti più recenti nei progetti. Se si usa ASP.NET scaffolding dopo aver aggiornato i pacchetti dei progetti all'API Web 2.2 o ASP.NET MVC 5.2, assicurarsi che le versioni dell'API Web e ASP.NET MVC siano coerenti.
L'installazione del pacchetto NuGet Microsoft.jQuery.Unobtrusive.Validation non riesce perché non riesce a trovare una versione di Microsoft.jQuery.Unobtrusive.Validation compatibile con jQuery 1.4.1
Microsoft.jQuery.Unobtrusive.Validation richiede jQuery >=1.8 e jQuery.Validation >=1.8. JQuery.Validation (1.8) richiede tuttavia jQuery (≥ 1.3.2 && ≤ 1.6). Per questo motivo, quando NuGet installa contemporaneamente JQuery 1.8 e jQuery.Validation 1.8, ha esito negativo. Quando si verifica questo problema, è sufficiente aggiornare la versione di jQuery.Validation a >= 1.8.0.1 con il limite jQuery risolto per primo, sarà possibile installare Microsoft.jQuery.Unobtrusive.Validation.
Jquery. La convalida del pacchetto nuget versione 1.13.0 non riconosce alcuni indirizzi di posta elettronica internazionali
Il pacchetto nuget jQuery.Validation versione 1.11.1 è l'ultima versione nota che riconosce gli indirizzi di posta elettronica validi seguenti. Le versioni successive potrebbero non essere in grado di riconoscerle. Ad esempio:
Standard e-Mail Address Internationalization (EAI) (ad esempio, 用户@domain.com)
EAI + Internationalized Resource Identifiers (IRIs) (ad esempio, 用户@домен.рф)
Il problema viene segnalato all'indirizzo https://github.com/jzaefferer/jquery-validation/issues/1222
Evidenziazione della sintassi per le visualizzazioni Razor in Visual Studio 2013
Se si esegue l'aggiornamento a ASP.NET MVC 5.2 senza aggiornare Visual Studio 2013, non si otterrà il supporto dell'editor di Visual Studio per l'evidenziazione della sintassi durante la modifica delle visualizzazioni Razor. È necessario aggiornare Visual Studio 2013 per ottenere questo supporto.