Получить конечную точку для другого HttpContextC#

Место общения программистов C#
Ответить
Anonymous
 Получить конечную точку для другого HttpContext

Сообщение Anonymous »

Я пытаюсь написать действие контроллера, которое будет получать метаданные (в частности, какие аргументы передавать) для данного URL-адреса. Есть ряд похожих вопросов, например, ядро ​​Asp.Net получает значение RouteData из URL-адреса, но они кажутся неверными в ASP.NET Core 3.1, поскольку оно переключилось на «Маршрутизацию конечных точек».

Таким образом, код типа var router = RouteData.Routers.First(); //получить маршрутизатор верхнего уровня больше не будет работать правильно, так как Routers не содержит ничего значимого.

Я вижу несколько примеры использования конечных точек для текущего HttpContext, например здесь, но ни одного для пользовательского.

Я также видел упоминание о IActionDescriptorCollectionProvider , но это не позволит мне легко фильтровать определенный URL-адрес.

Пока я внедряю HttpContextFactory, но передаю ему IEndpointFeature из текущего контекста:

Код: Выделить всё

    private readonly IHttpContextFactory _HttpContextFactory;

public MyController(IHttpContextFact httpContextFactory)
{
_HttpContextFactory = httpContextFactory;
}

public async Task GetRouteDataForUrl([FromQuery(Name = "url")] string url)
{
var uri = new Uri(url);

// this is probably wrong -- it supplies the _original_ context's endpoint feature
var featureCollection = this.HttpContext.Features;

var httpContext = _HttpContextFactory.Create(featureCollection);
httpContext.Request.Path = uri.PathAndQuery;

var feature = httpContext.Features.Get();
var endpoint = httpContext.Features.Get()?.Endpoint; // see https://github.com/aspnet/AspNetCore/issues/5135#issuecomment-461547335

return Ok(endpoint.Metadata.OfType());
}
Это позволяет получить правильные типы, но не правильные результаты.

Для этого не существует общедоступного конструктора EndpointFeature, поэтому мне, вероятно, не придется передавать свой собственный. Приведенный выше код берет IEndpointFeature из исходного («неправильного») контекста http и в результате дает мне конечную точку для контроллера GetRouteDataForUrl, а не для контроллера. Я передаю URL.

Подробнее здесь: https://stackoverflow.com/questions/595 ... ttpcontext
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»