asp.net core webapi專案配置全域性路由
阿新 • • 發佈:2018-12-11
/// <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; } } } } }