.NET Core MVC согласовывают маршрут для регистрации промежуточного ПО - PullRequest
0 голосов
/ 04 июля 2018

В моем проекте я регистрирую каждый запрос с помощью промежуточного программного обеспечения. Как я могу получить маршрут, который был найден для запроса в целях регистрации?

У меня есть полный путь в запросе, например / V1 / User / 123

Но я хочу записать это: / v1 / User / {id}

Вот что у меня есть:

public async override Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
    var path = context.ActionDescriptor.AttributeRouteInfo.Template;

    await next();
}

Это в моем базовом контроллере, как мне получить это промежуточное программное обеспечение для регистрации?

Вот как я получил это промежуточное программное обеспечение для регистрации:

BaseController:

public async override Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
    var actionPath = context.ActionDescriptor.AttributeRouteInfo.Template;

    HttpContext.Items.Add("ActionInfo", actionPath);

    await next();
}

LoggingMiddleware:

var actionInfo = context.Items["ActionInfo"];

if (actionInfo != null)
{
    actionMatched = actionInfo.ToString();
}

Есть ли лучший способ сделать это? Также это работает, только если вы используете маршрутизацию атрибутов. Как это может работать, если вы регистрируете маршруты при запуске?

1 Ответ

0 голосов
/ 04 июля 2018

Ну, ясно, просто, вы не можете.

Маршрут представляет собой концепцию ASP.NET Core MVC, и поэтому его существование можно найти только в промежуточном программном обеспечении MVC ASP.NET Core. Вот почему вы можете получить к нему доступ через ActionFilter, это также концепция ASP.NET Core MVC. Из части промежуточного программного обеспечения, ближайший, который вы можете получить, перейдя на httpContext.Request и используя Path / Query / QueryString / Method.

Зная это, у вас есть выбор:

  1. Реализуйте свой регистратор как фильтр действий. Это позволяет вам легко получить доступ к маршруту и ​​другим подробным сведениям, таким как контроллер и метод действия. Но запросы, которые обрабатываются вне промежуточного программного обеспечения MVC (статический файл, авторизация не удалась, назовите его), не будут регистрироваться.
  2. Реализуйте его как промежуточное ПО и просто зарегистрируйте URL.
  3. Сохраните данные как-нибудь, где-нибудь, чтобы ваше промежуточное ПО могло получить к ним доступ, как вы сделали, добавив элементы в HttpContext. Это выглядит довольно нахально.

Варианты 1 и 2 являются прекрасным выбором, и это зависит от ваших потребностей, которые лучше для вас Возможно даже и 1 и 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...