在我的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);
});
有指针吗?请提出建议。
答案 0 :(得分:0)
我认为这里的问题是默认的IHttpContextAccessor不知道ODATA批处理请求的HttpContext。
对于非批处理调用,IHttpContextAccessor.HttpContext返回一个有效值:这与odata控制器的HttpContext属性中可用的HttpContext相同。
对于批处理调用,IHttpContextAccessor.HttpContext始终返回NULL,但是控制器的HttpContext属性有效/非空。
谁能解释为什么IHttpContextAccessor仅在命中批处理终结点时才返回NULL值?甚至绕过它吗?!