我试图从我的一个应用程序访问一个类库,它抛出了以下异常:
> 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>();
可能是导致此问题的原因。任何帮助都会非常有用。
答案 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解决方案。