共用方式為


ASP.NET MVC 5.2 的新功能

Microsoft 提供

本主題描述 ASP.NET MVC 5.2、Microsoft.AspNet.MVC 5.2.2ASP.NET MVC 5.2.3 Beta 版的新功能

軟體需求

下載

運行時間功能會以 NuGet 資源庫上的 NuGet 套件的形式發行。 所有運行時間套件都遵循 語意版本設定 規格。 最新的 ASP.NET MVC 5.2 套件具有下列版本:“5.2.0”。 您可以透過 NuGet 安裝或更新這些套件。 此版本也包含 NuGet 上的對應當地語系化套件。

您可以使用 NuGet 套件管理員主控台來安裝或更新已發行的 NuGet 套件:

Install-Package Microsoft.AspNet.Mvc -5.2.0 版

文件

ASP.NET 網站 https://www.asp.net/mvc () 提供 ASP.NET MVC 5.2 的教學課程和其他資訊。

ASP.NET MVC 5.2 中的新功能

屬性路由改善

屬性路由現在提供稱為 IDirectRouteProvider 的擴充點,可讓您完整控制如何探索和設定屬性路由。 IDirectRouteProvider 負責提供動作和控制器清單,以及相關聯的路由資訊,以確切指定這些動作所需的路由設定。 呼叫 MapAttributes/MapHttpAttributeRoutes 時,可以指定 IDirectRouteProvider 實作。

藉由擴充預設實作 DefaultDirectRouteProvider,自定義 IDirectRouteProvider 會最簡單。 這個類別提供個別可覆寫的虛擬方法,以變更探索屬性、建立路由專案,以及探索路由前置詞和區域前置詞的邏輯。

透過 IDirectRouteProvider 的新屬性路由擴充性,使用者可以執行下列動作:

  1. 支援屬性路由的繼承。 例如,在下列案例中,部落格和市集控制器使用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. 自動產生屬性路由的路由名稱。

    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. 篩選出您想要屬性路由尋找的控制器。 我們希望儘快在 3 和 4 上部落格。

已變更 API 介面的 Facebook 修正

MVC Facebook 套件因為 Facebook 所做的 API 變更而中斷。 我們也發行新的 Facebook 套件, (Microsoft.AspNet.Facebook 1.0.0) 來修正這些問題。

已知問題和重大變更

將MVC/Web API Scaffolding至具有5.2.0套件的專案,會導致專案中不存在的專案產生5.1.2套件

更新 ASP.NET MVC 5.2.0 的 NuGet 套件不會更新 Visual Studio 工具,例如 ASP.NET Scaffolding 或 ASP.NET Web 應用程式專案範本。 他們會在 Update 2) 中使用舊版 ASP.NET 運行時間套件 (,例如 5.1.2。 因此,ASP.NET Scaffolding 會安裝舊版 (,例如 Update 2 中的 5.1.2) 必要套件,如果您的專案中尚未提供這些套件。 不過,Visual Studio 2013 RTM 或 Update 1 中的 ASP.NET Scaffolding 不會覆寫您專案中的最新套件。 如果您在將專案的套件更新至 Web API 2.2 或 ASP.NET MVC 5.2 之後使用 ASP.NET Scaffolding,請確定 Web API 和 ASP.NET MVC 的版本一致。

Microsoft.jQuery.Unobtrusive.Validation NuGet 套件安裝失敗,因為它找不到與 jQuery 1.4.1 兼容的 Microsoft.jQuery.Unobtrusive.Validation 版本

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 版無法辨識某些國際電子郵件位址

jQuery.Validation nuget 套件 1.11.1 版是最後一個已知版本,可辨識下列有效的電子郵件位址。 任何較新的版本都可能無法辨識它們。 例如:

電子郵件地址國際化 (EAI) 標準 (,例如 用户@domain.com)
EAI + 國際化資源標識符 (IRIs) (例如, 使用者@домен.рф)

問題報告於 https://github.com/jzaefferer/jquery-validation/issues/1222

Visual Studio 2013 中Razor檢視的語法醒目提示

如果您更新為 ASP.NET MVC 5.2 而不更新 Visual Studio 2013,則編輯 Razor 檢視時,將不會取得 Visual Studio 編輯器對語法醒目提示的支援。 您必須更新 Visual Studio 2013 才能取得此支援。