M
M
Mikhail Plyusnin2019-04-22 21:05:09
.NET
Mikhail Plyusnin, 2019-04-22 21:05:09

HttpContext Request Cookies and Configurawait(false)?

Good evening, I'm thinking about something, let's say there is such a web.api .net method:

[HttpGet]
        public async Task<IHttpActionResult> Index(Guid portalUser)
        {
//можно сказать, что  это фабрики которые создают нужные мне объекты. 
//authCookiesManager примерно выглядит вот так:
/*
() =>
                    (context) => new AuthCookiesManager(
                        context.Request.Cookies,
                        context.Response.Cookies))
*/
            var authCookiesManager = getAuthCookiesManager(ActionContext.HttpContext());
            var сlient = getClient(ActionContext.HttpContext());

//можно ли здесь вызвать .ConfigureAwait(false)
            var value = await сlient.FooAsync(portalUser);

//я понимаю, с .ConfigureAwait(false) в этом месте обратившись к ActionContext.HttpContext()
//я могу получить уже null, либо текущий контекст, либо вообще контекст какого-нибудь другого запроса

            if (string.IsNullOrWhiteSpace(value ))
            {
                return BadRequest();
            }

//authCookiesManager работает с cookies текущего запроса, которые я прокинул ему вначале метода
//Вот интересно поведение этих куки с  .ConfigureAwait(false), они тоже подохнут или ссылки на них все же будут жить внутри данного объекта? 
            authCookiesManager.SaveSessionId(value , settings.Domain);
            authCookiesManager.RemoveSessionState();

            return Json(new ClientResult {RedirectTo = settings.Href});
        }

internal static class HttpActionContextExtensions
    {
        private const string MsHttpContext = "MS_HttpContext";

        internal static HttpContextBase HttpContext(this HttpActionContext context)
        {
            Ensure.NotNull(context, nameof(HttpActionContext));

            return context.Request.Properties[MsHttpContext] as HttpContextBase;
        }
    }

Do I understand everything correctly? With .ConfigureAwait(false) the code after it cannot guarantee the http context of ActionContext.HttpContext() for me, but I wonder how things are with cookies?

Answer the question

In order to leave comments, you need to log in

1 answer(s)
C
chibitko, 2019-04-25
@rpe4a

ActionContext is thread-independent, after await it is exactly the same as before await, that's why it is ACTION context

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question