ASP.NET Core HttpContext является нулевым внешним контроллером в случае пакетного запроса - PullRequest
0 голосов
/ 25 октября 2019

В моей службе ASP.NET Core OData, когда мы делаем пакетный запрос и пытаемся получить доступ к HttpContext за пределами контроллера, он равен нулю. В случае не пакетного запроса HttpContext заполняется правильно.

Я использую IHttpContextAccessor для получения httpContext:

public static class AspnetcoreHttpContext
{
    public static IHttpContextAccessor contextAccessor;

    public static void SetContextAccessor(IHttpContextAccessor accessor)
    {
        contextAccessor = accessor;
    }

    /// <summary>
    /// Gets the current HTTP Context. This may be null!!!
    /// </summary>
    public static HttpContext Current
    {
            get
            {
                return contextAccessor?.HttpContext;
            }
    }
}

При запуске я настроил пакет, как показано ниже;

app.UseODataBatching();
app.UseMvc(routeBuilder =>
            {
                var conventions = ODataRoutingConventions.CreateDefault();
                ODataBatchHandler odataBatchHandler = new CustomODataBatchHandler();
                ApiVersion version = new ApiVersion(1, 0);
                string routeName = string.Format("odata-bypath{0}", version.MajorVersion.Value);
                routeBuilder.MapVersionedODataRoute(routeName, "odata/v{version:apiVersion}",
                    EdmModel, version, new DefaultODataPathHandler(), conventions, batchHandler: odataBatchHandler);
            });

Есть указатели? пожалуйста, предложите.

1 Ответ

0 голосов
/ 07 ноября 2019

Я думаю, что проблема здесь в том, что IHttpContextAccessor по умолчанию не знает о HttpContext пакетного запроса ODATA.

Для не пакетных вызовов IHttpContextAccessor.HttpContext возвращает допустимое значение: это тот же HttpContextкак доступно в свойстве HttpContext контроллера odata.

Для пакетных вызовов IHttpContextAccessor.HttpContext всегда возвращает NULL, но свойство контроллера HttpContext является допустимым / ненулевым.

Может кто-нибудь объяснить, почему IHttpContextAccessor мог бывернуть значение NULL только при достижении конечной точки пакета? И даже обойти это?!

...