37 lines
1.2 KiB
C#
37 lines
1.2 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.AspNetCore.Routing;
|
|
using Microsoft.AspNetCore.Routing.Patterns;
|
|
using Microsoft.Extensions.Primitives;
|
|
|
|
namespace ASC.Api.Core.Core
|
|
{
|
|
public class CustomEndpointDataSource : EndpointDataSource
|
|
{
|
|
public EndpointDataSource Source { get; }
|
|
|
|
public override IReadOnlyList<Endpoint> Endpoints { get; }
|
|
public CustomEndpointDataSource(EndpointDataSource source)
|
|
{
|
|
Source = source;
|
|
var endpoints = Source.Endpoints.Cast<RouteEndpoint>();
|
|
Endpoints = endpoints.Select(r => new RouteEndpoint(r.RequestDelegate, RoutePatternFactory.Parse(r.RoutePattern.RawText + ".{format}"), r.Order, r.Metadata, r.DisplayName)).ToList();
|
|
}
|
|
|
|
public override IChangeToken GetChangeToken()
|
|
{
|
|
return Source.GetChangeToken();
|
|
}
|
|
}
|
|
|
|
public static class EndpointExtension
|
|
{
|
|
public static IEndpointRouteBuilder MapCustom(this IEndpointRouteBuilder endpoints)
|
|
{
|
|
endpoints.DataSources.Add(new CustomEndpointDataSource(endpoints.DataSources.First()));
|
|
return endpoints;
|
|
}
|
|
}
|
|
}
|