Aracılığıyla paylaş


ASP.NET MVC 5.2'deki Yenilikler

Microsoft tarafından

Bu konu başlığında ASP.NET MVC 5.2, Microsoft.AspNet.MVC 5.2.2 ve ASP.NET MVC 5.2.3 Beta'ya yönelik yenilikler açıklanmaktadır

Yazılım Gereksinimleri

İndir

Çalışma zamanı özellikleri NuGet galerisinde NuGet paketleri olarak yayınlanmaktadır. Tüm çalışma zamanı paketleri AnlamSal Sürüm oluşturma belirtimini izler. En son ASP.NET MVC 5.2 paketi şu sürüme sahiptir: "5.2.0". NuGet aracılığıyla bu paketleri yükleyebilir veya güncelleştirebilirsiniz. Sürüm, NuGet'te karşılık gelen yerelleştirilmiş paketleri de içerir.

NuGet Paket Yöneticisi Konsolu'nu kullanarak yayımlanan NuGet paketlerini yükleyebilir veya güncelleştirebilirsiniz:

Install-Package Microsoft.AspNet.Mvc -Sürüm 5.2.0

Belgeler

MVC 5.2 ASP.NET hakkında öğreticiler ve diğer bilgiler ASP.NET web sitesinden (https://www.asp.net/mvc) edinilebilir.

ASP.NET MVC 5.2'deki Yeni Özellikler

Öznitelik yönlendirme geliştirmeleri

Öznitelik Yönlendirme artık öznitelik yollarının nasıl bulunup yapılandırıldığı üzerinde tam denetim sağlayan IDirectRouteProvider adlı bir genişletilebilirlik noktası sağlar. IDirectRouteProvider, bu eylemler için tam olarak hangi yönlendirme yapılandırmasının isteneceğini belirtmek üzere ilişkili yol bilgileriyle birlikte bir eylem ve denetleyici listesi sağlamakla sorumludur. MapAttributes/MapHttpAttributeRoutes çağrılırken bir IDirectRouteProvider uygulaması belirtilebilir.

Varsayılan uygulamamız DefaultDirectRouteProvider'ı genişleterek IDirectRouteProvider'ı özelleştirmek en kolay seçenek olacaktır. Bu sınıf, öznitelikleri bulma, yol girdileri oluşturma ve yol ön eki ile alan ön ekini bulma mantığını değiştirmek için ayrı geçersiz kılınabilir sanal yöntemler sağlar.

IDirectRouteProvider'ın yeni öznitelik yönlendirme genişletilebilirliği ile, kullanıcı aşağıdakileri yapabilir:

  1. Öznitelik yollarının devralınma desteği. Örneğin, aşağıdaki senaryoda Blog ve Mağaza denetleyicileri BaseController tarafından tanımlanan bir öznitelik yol kuralı kullanıyor.

    [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. Öznitelik yolları için otomatik olarak yol adları oluşturun.

    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. Rotalar yol tablosuna eklenmeden önce yol ön eklerini tek bir merkezi yerde değiştirin.

  4. Öznitelik yönlendirmesinin aramasını istediğiniz denetleyicileri filtreleyin. Yakında 3 ve 4'te blog yazmayı umuyoruz.

Değiştirilen API yüzeyi için Facebook düzeltmeler

MVC Facebook paketi, Facebook tarafından yapılan birkaç API değişikliği nedeniyle bozuldu. Bu sorunları çözmek için yeni bir Facebook paketi (Microsoft.AspNet.Facebook 1.0.0) da yayınlıyoruz.

Bilinen Sorunlar ve Hataya Neden Olan Değişiklikler

MVC/Web API'sini 5.2.0 paketleriyle bir projeye iskeleye almak, projede henüz mevcut olmayanlar için 5.1.2 paketleriyle sonuçlanmıştır

ASP.NET MVC 5.2.0 için NuGet paketlerinin güncelleştirilmesi, ASP.NET yapı iskelesi veya ASP.NET Web Uygulaması proje şablonu gibi Visual Studio araçlarını güncelleştirmez. ASP.NET çalışma zamanı paketlerinin önceki sürümünü kullanırlar (örneğin, Güncelleştirme 2'de 5.1.2). Sonuç olarak, ASP.NET yapı iskelesi, projelerinizde mevcut değilse gerekli paketlerin önceki sürümünü (güncelleştirme 2'de 5.1.2 gibi) yükler. Ancak, Visual Studio 2013 RTM veya Güncelleştirme 1'deki ASP.NET yapı iskelesi, projelerinizdeki en son paketlerin üzerine yazılmaz. Projelerinizin paketlerini Web API 2.2 veya ASP.NET MVC 5.2'ye güncelleştirdikten sonra ASP.NET yapı iskelesi kullanıyorsanız, Web API'sinin ve ASP.NET MVC sürümlerinin tutarlı olduğundan emin olun.

Microsoft.jQuery.Unobtrusive.Validation NuGet paketi yüklemesi, jQuery 1.4.1 ile uyumlu microsoft.jQuery.Unobtrusive.Validation sürümünü bulamadığından başarısız oluyor

Microsoft.jQuery.Unobtrusive.Validation için jQuery >=1.8 ve jQuery.Validation >=1.8 gerekir. Ancak jQuery.Validation (1.8) için jQuery (≥ 1.3.2 && ≤ 1.6) gerekir. Bu nedenle, NuGet JQuery 1.8 ve jQuery.Validation 1.8'i aynı anda yüklediğinde başarısız olur. Bu sorunu gördüğünüzde jQuery.Validation >sürümünü = 1.8.0.1 olarak güncelleştirebilirsiniz. Bu sürümde önce jQuery üst sınırı düzeltilmiştir. Microsoft.jQuery.Unobtrusive.Validation'ı yükleyebilmeniz gerekir.

Jquery. Nuget paketi sürüm 1.13.0 doğrulama bazı uluslararası e-posta adreslerini tanımıyor

jQuery.Validation nuget paketi sürüm 1.11.1, geçerli e-posta adreslerini izleyen bilinen son sürümdür. Sonraki sürümler bunları tanıyamayabilir. Örnek:

E-posta Adresi Uluslararasılaştırma (EAI) standardı (örn. 用户@domain.com)
EAI + Uluslararası Kaynak Tanımlayıcıları (IRI) (örn., 用户@домен.рф)

Sorun şu konumda bildirilir: https://github.com/jzaefferer/jquery-validation/issues/1222

Visual Studio 2013'da Razor Görünümleri için Söz Dizimi Vurgulama

Visual Studio 2013 güncelleştirmeden ASP.NET MVC 5.2'ye güncelleştirirseniz, Razor görünümlerini düzenlerken söz dizimi vurgulama için Visual Studio düzenleyicisi desteği alamazsınız. Bu desteği almak için Visual Studio 2013 güncelleştirmeniz gerekir.