1. 程式人生 > >asp.net core webapi專案配置全域性路由

asp.net core webapi專案配置全域性路由

/// <summary>
    /// 全域性路由字首配置
    /// </summary>
    public class RouteConvention : IApplicationModelConvention
    {
        /// <summary>
        /// 定義一個路由字首變數
        /// </summary>
        private readonly AttributeRouteModel _centralPrefix;
        /// <summary>
        /// 呼叫時傳入指定的路由字首
        
/// </summary> /// <param name="routeTemplateProvider"></param> public RouteConvention(IRouteTemplateProvider routeTemplateProvider) { _centralPrefix = new AttributeRouteModel(routeTemplateProvider); } //介面的Apply方法 public void Apply(ApplicationModel application) {
//遍歷所有的 Controller foreach (var controller in application.Controllers) { // 1、已經標記了 RouteAttribute 的 Controller         //這一塊需要注意,如果在控制器中已經標註有路由了,則會在路由的前面再新增指定的路由內容。 var matchedSelectors = controller.Selectors.Where(x => x.AttributeRouteModel != null
).ToList(); if (matchedSelectors.Any()) { foreach (var selectorModel in matchedSelectors) { // 在 當前路由上 再 新增一個 路由字首 selectorModel.AttributeRouteModel = AttributeRouteModel.CombineAttributeRouteModel(_centralPrefix, selectorModel.AttributeRouteModel); } } //2、 沒有標記 RouteAttribute 的 Controller var unmatchedSelectors = controller.Selectors.Where(x => x.AttributeRouteModel == null).ToList(); if (unmatchedSelectors.Any()) { foreach (var selectorModel in unmatchedSelectors) { // 新增一個 路由字首 selectorModel.AttributeRouteModel = _centralPrefix; } } } } }