在批处理请求的情况下,ASP.NET Core HttpContext在控制器外部为空

时间:2019-10-25 05:52:28

标签: asp.net-mvc asp.net-core .net-core odata httpcontext

在我的ASP.NET Core OData服务中,当我们发出批处理请求并尝试访问控制器外部的HttpContext时,它为null。在非批处理请求的情况下,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;
            }
    }
}

在starup中,我已如下配置批处理;

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 :(得分:0)

我认为这里的问题是默认的IHttpContextAccessor不知道ODATA批处理请求的HttpContext。

对于非批处理调用,IHttpContextAccessor.HttpContext返回一个有效值:这与odata控制器的HttpContext属性中可用的HttpContext相同。

对于批处理调用,IHttpContextAccessor.HttpContext始终返回NULL,但是控制器的HttpContext属性有效/非空。

谁能解释为什么IHttpContextAccessor仅在命中批处理终结点时才返回NULL值?甚至绕过它吗?!