2022-02-03 13:19:48 +00:00
|
|
|
|
namespace ASC.Api.Core.Core;
|
|
|
|
|
|
|
|
|
|
public class CustomEndpointDataSource : EndpointDataSource
|
2019-06-25 10:46:10 +00:00
|
|
|
|
{
|
2022-02-03 13:19:48 +00:00
|
|
|
|
public EndpointDataSource Source { get; }
|
|
|
|
|
public override IReadOnlyList<Endpoint> Endpoints { get; }
|
2021-09-28 11:41:35 +00:00
|
|
|
|
|
2022-02-03 13:19:48 +00:00
|
|
|
|
public CustomEndpointDataSource(EndpointDataSource source)
|
|
|
|
|
{
|
|
|
|
|
Source = source;
|
|
|
|
|
var endpoints = Source.Endpoints.Cast<RouteEndpoint>();
|
|
|
|
|
Endpoints = endpoints
|
|
|
|
|
.SelectMany(r =>
|
|
|
|
|
{
|
|
|
|
|
var endpoints = new List<RouteEndpoint>();
|
2021-09-28 11:41:35 +00:00
|
|
|
|
|
2022-02-03 13:19:48 +00:00
|
|
|
|
var attr = r.Metadata.OfType<CustomHttpMethodAttribute>().FirstOrDefault();
|
|
|
|
|
var enableFormat = attr == null || !attr.DisableFormat;
|
2021-09-28 11:41:35 +00:00
|
|
|
|
|
2022-02-03 13:19:48 +00:00
|
|
|
|
if (enableFormat)
|
2022-02-07 16:03:16 +00:00
|
|
|
|
{
|
|
|
|
|
endpoints.Add(new RouteEndpoint(r.RequestDelegate, RoutePatternFactory.Parse(r.RoutePattern.RawText
|
|
|
|
|
+ ".{format}"), r.Order, r.Metadata, r.DisplayName));
|
|
|
|
|
}
|
2022-02-03 13:19:48 +00:00
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
endpoints.Add(new RouteEndpoint(r.RequestDelegate, RoutePatternFactory.Parse(r.RoutePattern.RawText + ".json"), r.Order - 1, r.Metadata, r.DisplayName));
|
|
|
|
|
endpoints.Add(new RouteEndpoint(r.RequestDelegate, RoutePatternFactory.Parse(r.RoutePattern.RawText + ".xml"), r.Order - 1, r.Metadata, r.DisplayName));
|
|
|
|
|
}
|
2022-02-07 16:03:16 +00:00
|
|
|
|
|
2022-02-03 13:19:48 +00:00
|
|
|
|
return endpoints;
|
2022-02-07 16:03:16 +00:00
|
|
|
|
|
2022-02-03 13:19:48 +00:00
|
|
|
|
}).ToList();
|
2019-06-25 10:46:10 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-02-07 16:03:16 +00:00
|
|
|
|
public override IChangeToken GetChangeToken()
|
|
|
|
|
{
|
|
|
|
|
return Source.GetChangeToken();
|
|
|
|
|
}
|
2022-02-03 13:19:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static class EndpointExtension
|
|
|
|
|
{
|
|
|
|
|
public static IEndpointRouteBuilder MapCustom(this IEndpointRouteBuilder endpoints)
|
2019-06-25 10:46:10 +00:00
|
|
|
|
{
|
2022-02-03 13:19:48 +00:00
|
|
|
|
endpoints.DataSources.Add(new CustomEndpointDataSource(endpoints.DataSources.First()));
|
2022-01-31 16:36:51 +00:00
|
|
|
|
|
2022-02-03 13:19:48 +00:00
|
|
|
|
return endpoints;
|
2019-06-25 10:46:10 +00:00
|
|
|
|
}
|
2022-02-03 13:08:15 +00:00
|
|
|
|
}
|