ArgumentException:执行此操作需要HttpContext。检查Web请求期间是否正在执行此操作

时间:2017-09-11 17:24:49

标签: c# asp.net-core .net-core

我试图从我的一个应用程序访问一个类库,它抛出了以下异常:

> An unhandled exception occurred while processing the
> request.ArgumentException: An HttpContext is required to perform this
> operation. Check that this operation is being performed during a web
> request.System.Web.Helpers.AntiForgery.GetTokens(string
> oldCookieToken, out string newCookieToken, out string formToken) 
> Stack    Query    Cookies    Headers   ArgumentException: An
> HttpContext is required to perform this operation. Check that this
> operation is being performed during a web
> request.System.Web.Helpers.AntiForgery.GetTokens(string
> oldCookieToken, out string newCookieToken, out string formToken)
> Custom.Storage.Web.Common.Helpers.AntiCsrfHelper.GetProtectedStateAndCookieToken(AuthState
> state, out string cookieToken)
> Custom.AspNetCore.Storage.Areas.Storage.Controllers.StorageController+<>c__DisplayClass15_0+<<BeginAuthorizationAsync>b__0>d.MoveNext()
> System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)
> System.Runtime.CompilerServices.ConfiguredTaskAwaitable+ConfiguredTaskAwaiter.GetResult()
> Custom.AspNetCore.Storage.Areas.Storage.Controllers.StorageController+<ProcessRequestWithProviderAsync>d__22.MoveNext()
> System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)
> System.Runtime.CompilerServices.ConfiguredTaskAwaitable+ConfiguredTaskAwaiter.GetResult()
> Custom.AspNetCore.Storage.Areas.Storage.Controllers.StorageController+<BeginAuthorizationAsync>d__15.MoveNext()
> System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)
> Microsoft.AspNetCore.Mvc.Internal.ObjectMethodExecutor+<CastToObject>d__38.MoveNext()
> System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task) System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task
> task)
> Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker+<InvokeActionMethodAsync>d__27.MoveNext()
> System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)
> Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker+<InvokeNextActionFilterAsync>d__25.MoveNext()
> Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext
> context)
> Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(ref
> State next, ref Scope scope, ref object state, ref bool isCompleted)
> Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker+<InvokeNextResourceFilter>d__22.MoveNext()
> Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ResourceExecutedContext
> context)
> Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(ref
> State next, ref Scope scope, ref object state, ref bool isCompleted)
> Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker+<InvokeAsync>d__20.MoveNext()
> System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)
> Microsoft.AspNetCore.Builder.RouterMiddleware+<Invoke>d__4.MoveNext()
> System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
> task)
> System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
> task)
> Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware+<Invoke>d__7.MoveNext()

我的Startup.cs包含HttpContextAccessor注册:

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

可能是导致此问题的原因。任何帮助都会非常有用。

1 个答案:

答案 0 :(得分:2)

  

处理请求时发生未处理的异常   ArgumentException:执行此操作需要HttpContext   操作。检查Web中是否正在执行此操作   请求。
  System.Web.Helpers.AntiForgery.GetTokens(string oldCookieToken,out string newCookieToken,out string formToken)

您在那里(直接或间接)使用System.Web.Helpers.AntiForgery.GetTokens。这是“经典”ASP.NET,如System.Web,而不是ASP.NET Core。 Classic ASP.NET使用了很多静态对象,在这种情况下,它正在寻找System.Web.HttpContext.Current

但是,ASP.NET Core和框架的ASP.NET是不兼容的。 ASP.NET Core不使用System.Web命名空间中的类型,因此您无法使用为ASP.NET和ASP.NET构建的任何

幸运的是,默认情况下ASP.NET Core提供了很多功能。如果您正在寻找反请求伪造,那么ASP.NET Core内置了一些东西。查看the documentation以获取有关如何启动它的更多信息。

通常,请确保您使用的是ASP.NET Core指南和软件包。它可能有点令人困惑,但已经有很多可用的ASP.NET Core解决方案。