From 05ccb4d8f1bbe3fb64e117136b4a89bcfb0b0b33 Mon Sep 17 00:00:00 2001 From: crupest Date: Tue, 27 Oct 2020 19:21:35 +0800 Subject: Split front and back end. --- .../Timeline/Routes/ApiRoutePrefixConvention.cs | 46 ++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 BackEnd/Timeline/Routes/ApiRoutePrefixConvention.cs (limited to 'BackEnd/Timeline/Routes/ApiRoutePrefixConvention.cs') diff --git a/BackEnd/Timeline/Routes/ApiRoutePrefixConvention.cs b/BackEnd/Timeline/Routes/ApiRoutePrefixConvention.cs new file mode 100644 index 00000000..ca38a0d9 --- /dev/null +++ b/BackEnd/Timeline/Routes/ApiRoutePrefixConvention.cs @@ -0,0 +1,46 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.ApplicationModels; +using Microsoft.AspNetCore.Mvc.Infrastructure; +using Microsoft.AspNetCore.Mvc.Routing; +using System.Linq; + +namespace Timeline.Routes +{ + public static class MvcOptionsExtensions + { + public static void UseApiRoutePrefix(this MvcOptions opts, IRouteTemplateProvider routeAttribute) + { + opts.Conventions.Add(new ApiRoutePrefixConvention(routeAttribute)); + } + + public static void UseApiRoutePrefix(this MvcOptions opts, string prefix) + { + opts.UseApiRoutePrefix(new RouteAttribute(prefix)); + } + } + + public class ApiRoutePrefixConvention : IApplicationModelConvention + { + private readonly AttributeRouteModel _routePrefix; + + public ApiRoutePrefixConvention(IRouteTemplateProvider route) + { + _routePrefix = new AttributeRouteModel(route); + } + + public void Apply(ApplicationModel application) + { + foreach (var selector in application.Controllers.Where(c => c.Filters.Any(f => f is IApiBehaviorMetadata)).SelectMany(c => c.Selectors)) + { + if (selector.AttributeRouteModel != null) + { + selector.AttributeRouteModel = AttributeRouteModel.CombineAttributeRouteModel(_routePrefix, selector.AttributeRouteModel); + } + else + { + selector.AttributeRouteModel = _routePrefix; + } + } + } + } +} -- cgit v1.2.3