Я довольно скептически отношусь к этому подходу, и автор не отвечает. Меня больше всего беспокоит подход к использованию глобального статического HttpContext. Я думал, что это не должно работать с двумя запросами. Пример этого случая приведен ниже (вместе с подходом, представленным в упомянутой мной статье):
Код: Выделить всё
public static class AppContext
{
public static IHttpContextAccessor HttpContextAccessor { get; set; }
public static void Configure(IHttpContextAccessor accessor)
{
HttpContextAccessor = accessor;
}
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
IHttpContextAccessor contextAccessor)
{
AppContext.Configure(contextAccessor);
...
}
[Route("api/[controller]")]
[ApiController]
public class ExampleController : ControllerBase
{
[HttpGet("{number}")]
public IActionResult Example(int number)
{
if (number == 1)
{
Thread.Sleep(10000);
}
var result = AppContext.HttpContextAccessor.HttpContext.Request.GetDisplayUrl();
return Ok(result + " " + number);
}
}
Однако меня смущает фактическое поведение. Я отлаживаю фрагмент, устанавливая точку останова на строке с var result = .... Сначала я отправляю запрос с номером = 1, который некоторое время засыпает, а затем отправляю второй запрос с другим значением номера. Я пропускаю установленную точку останова для первого запроса и жду, пока первый запрос (с номером = 1) остановится на ней. Затем я проверяю, что возвращает GetDisplayUrl(), и он возвращает путь с /1 (это действительно путь для этого запроса, который неактивен в течение 10 секунд). Я ожидаю, что оно закончится на /2, поскольку статическое поле с IHttpContextAccessor статического класса AppContext было переписано вторым запросом в методе ConfigurationServices().
Я считаю, что упускаю что-то важное, и был бы рад, если бы вы также предоставили некоторые источники, которые я (и другие в замешательстве) могли бы использовать, чтобы заполнить пробел.
Не могли бы вы также дать мне еще немного информации об использовании этого подхода? Страдает ли тестируемость (поскольку я использую статический класс повсюду в приложении) и каким образом?
Подробнее здесь: https://stackoverflow.com/questions/575 ... t-requests
Мобильная версия