У меня есть промежуточное программное обеспечение, которое вызывается для каждого запроса к моим API. Я хочу зарегистрировать шаблон маршрута вместе с длительностью запроса от этого промежуточного программного обеспечения. Как получить шаблон маршрута в моем промежуточном коде? Шаблон маршрута похож на «/ products/{productId}».ASP.Net core-получение значения маршрутизации от промежуточного программного обеспечения
ответ
Непросто получить данные маршрута из специального промежуточного программного обеспечения, поскольку оно создается промежуточным программным обеспечением MVC, которое обычно является последним промежуточным программным обеспечением, которое должно выполняться в конвейере ASP.NET Core.
Если вы хотите, чтобы войти запрос и ответ в вашем промежуточном слое, как показано ниже,
public async Task Invoke(HttpContext context)
{
var requestBodyStream = new MemoryStream();
var originalRequestBody = context.Request.Body;
await context.Request.Body.CopyToAsync(requestBodyStream);
requestBodyStream.Seek(0, SeekOrigin.Begin);
var url = UriHelper.GetDisplayUrl(context.Request);
var requestBodyText = new StreamReader(requestBodyStream).ReadToEnd();
_logger.Log(LogLevel.Information, 1, $"REQUEST METHOD: {context.Request.Method}, REQUEST BODY: {requestBodyText}, REQUEST URL: {url}", null, _defaultFormatter);
requestBodyStream.Seek(0, SeekOrigin.Begin);
context.Request.Body = requestBodyStream;
await next(context);
var bodyStream = context.Response.Body;
var responseBodyStream = new MemoryStream();
context.Response.Body = responseBodyStream;
await _next(context);
responseBodyStream.Seek(0, SeekOrigin.Begin);
var responseBody = new StreamReader(responseBodyStream).ReadToEnd();
_logger.Log(LogLevel.Information, 1, $"RESPONSE LOG: {responseBody}", null, _defaultFormatter);
responseBodyStream.Seek(0, SeekOrigin.Begin);
await responseBodyStream.CopyToAsync(bodyStream);
}
Однако, если вы действительно заинтересованы в данных маршрутов, есть очень хороший SO ответа реализовать Узнавайте маршруты miidleware here
Другим альтернативным подходом было бы использовать Action Filters для ведения журнала запросов/ответов.
Вот как я заработал. Я получаю шаблон маршрута внутри моего метода OnActionExecuting фильтра и добавляю его в HttpContext. Позже я получаю доступ к этому из HttpContext внутри моего промежуточного программного обеспечения, так как я могу получить доступ к HttpContext внутри промежуточного программного обеспечения.
public class LogActionFilter : IActionFilter
{
public LogActionFilter()
{
}
public void OnActionExecuted(ActionExecutedContext context)
{
}
public void OnActionExecuting(ActionExecutingContext context)
{
context.HttpContext.Items.Add("RouteTemplate", context.ActionDescriptor.AttributeRouteInfo.Template);
}
}
- 1. Схема промежуточного программного обеспечения Asp.Net Core Конфигурация промежуточного программного обеспечения
- 2. Среда промежуточного программного обеспечения: до или после промежуточного программного обеспечения?
- 3. Экспресс: вызов промежуточного программного обеспечения из другого промежуточного программного обеспечения
- 4. Настройка промежуточного программного обеспечения
- 5. Ошибка промежуточного программного обеспечения
- 6. Кэширование промежуточного программного обеспечения
- 7. Как получить переменную от промежуточного программного обеспечения?
- 8. Исключение промежуточного программного обеспечения от тонкого маршрута
- 9. ExpressJS - Отправить ответ от промежуточного программного обеспечения
- 10. Служба промежуточного программного обеспечения Asp.Net, зависящая от текущего пользователя
- 11. Использование промежуточного программного обеспечения ZeroC
- 12. Нарушение сценария промежуточного программного обеспечения
- 13. Заказ промежуточного программного обеспечения Express
- 14. Пропустить комплексный параметр для маршрутизации промежуточного программного обеспечения
- 15. экспресс-проверка промежуточного программного обеспечения
- 16. Router.use требует промежуточного программного обеспечения?
- 17. PlayFramework вид промежуточного программного обеспечения
- 18. Регистрация промежуточного программного обеспечения Laravel
- 19. Экспресс: составление промежуточного программного обеспечения
- 20. Логика промежуточного программного обеспечения Redux
- 21. Сфера действия промежуточного программного обеспечения в express.js
- 22. Изменение объекта ответа от промежуточного программного обеспечения OWIN
- 23. Использование промежуточного программного обеспечения Connect \ Express в рамках настраиваемого промежуточного программного обеспечения
- 24. Замените активатор для промежуточного программного обеспечения в ASP.NET Core
- 25. Обновление промежуточного программного обеспечения в Rails
- 26. Спецификации Android для разработчиков промежуточного программного обеспечения?
- 27. Конфигурация промежуточного программного обеспечения Owin в контроллере
- 28. Настройка функции промежуточного программного обеспечения NodeJS Connect
- 29. Проверка интеграции промежуточного программного обеспечения Express.js
- 30. Джанго - применение конкретных промежуточного программного обеспечения
Ваш пример кода журнала действительный запрос URL. Я хотел зарегистрировать шаблон маршрута. то есть вместо/products/product123 Мне нужно log/products/{productId}. Тем не менее, я могу получить это с помощью Action Filter. Спасибо за эту информацию. – sathya