Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HttpAuthenticationContext.请求不能为null_C#_Asp.net Web Api2_Owin_Autofac_Asp.net Mvc 5.2 - Fatal编程技术网

C# HttpAuthenticationContext.请求不能为null

C# HttpAuthenticationContext.请求不能为null,c#,asp.net-web-api2,owin,autofac,asp.net-mvc-5.2,C#,Asp.net Web Api2,Owin,Autofac,Asp.net Mvc 5.2,我正在使用ASP.NEt MVC 5 WEBAPI 2.2和OWIN+Identity与Autofac开发应用程序, 调用API控制器的方法时,我收到错误HttpAuthenticationContext.Request不能为null。。 调用了API控制器构造函数,但未调用方法。 下面是我的档案 Global.asx public class MvcApplication : HttpApplication { protected void Application_Start()

我正在使用ASP.NEt MVC 5 WEBAPI 2.2和OWIN+Identity与Autofac开发应用程序, 调用API控制器的方法时,我收到错误HttpAuthenticationContext.Request不能为null。。 调用了API控制器构造函数,但未调用方法。 下面是我的档案

Global.asx

public class MvcApplication : HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        IocConfig.RegisterDependencies();
        LogConfig.RegisterLog4NetConfig();

       // DataBaseConfig.Initialize();
       //var dbContext = new GoSphereDataContext();
       // Database.SetInitializer<GoSphereDataContext>(new GoSphereInitializer(dbContext));

        //var dbContext = new GoSphereDataContext();
        //if (!dbContext.Database.Exists())
        //{
        //    dbContext.Database.Create();
        //}

    }        
}
MeController.cs

/// <summary>
/// Inject Dependencies which are registered here with Container Builder.
/// </summary>
public class IocConfig
{
    public static void RegisterDependencies()
    {
        ContainerBuilder containerBuilder = new ContainerBuilder();

        // Register all controllers.
        containerBuilder.RegisterControllers(typeof(HomeController).Assembly);

        // Register all API controllers.
        containerBuilder.RegisterApiControllers(typeof(PackageController).Assembly);

        // Register HttpContextBase.
        containerBuilder.RegisterType(typeof(HttpContextBase));

        // Register Libs.
        containerBuilder.RegisterAssemblyTypes(typeof(PackageLib).Assembly).Where(t => t.Name.EndsWith("Lib")).InstancePerLifetimeScope();

        // Register other dependencies.
        containerBuilder.RegisterType<GoSphereDataContext>().As<DbContext>().InstancePerDependency();
        containerBuilder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerDependency();
        containerBuilder.RegisterGeneric(typeof(DataRepository<>)).As(typeof(IDataRepository<>)).InstancePerDependency();

        IContainer container = containerBuilder.Build();

        // Create the depenedency resolver for Web API.
        var resolver = new AutofacWebApiDependencyResolver(container);

        // Set MVC DI resolver to use our Autofac container
        DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

        // Configure Web API with the dependency resolver.
        GlobalConfiguration.Configuration.DependencyResolver = resolver;

        GlobalUtil.LifeTimeComponentContext = container;
    }
}
public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services
        // Configure Web API to use only bearer token authentication.
        config.SuppressDefaultHostAuthentication();
        config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

        // Use camel case for JSON data.
        config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}
[Authorize]
public class MeController : BaseApiController
{
    private ApplicationUserManager _userManager;

    public ApplicationUserManager UserManager
    {
        get
        {
            return _userManager ?? HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
        }
        private set
        {
            _userManager = value;
        }
    }

    // GET api/Me
    public GetViewModel Get()
    {
        var user = UserManager.FindById(User.Identity.GetUserId<int>());
        return new GetViewModel() { Name = user.Name };
    }

    public MeController(ILifetimeScope lifetimeScope)
        : base(lifetimeScope)
    {
    }
}
[授权]
公共类MeController:BaseApiController
{
私有应用程序用户管理器\u用户管理器;
公共应用程序管理员用户管理器
{
得到
{
返回_userManager??HttpContext.Current.GetOwinContext().GetUserManager();
}
专用设备
{
_userManager=value;
}
}
//获取api/Me
公共GetViewModel Get()
{
var user=UserManager.FindById(user.Identity.GetUserId());
返回新的GetViewModel(){Name=user.Name};
}
公共MeController(ILifetimeScope寿命范围)
:基本(生存时间范围)
{
}
}
调用域/api/me时,未调用控制器get方法的it构造函数,调用之前,其get方法给出错误

  • 发生了一个错误。 HttpAuthenticationContext.请求不能为null。 System.InvalidOperationException异常 在 System.Web.Http.HostAuthenticationFilter.d_u0.MoveNext() ---来自引发异常的上一个位置的堆栈结束跟踪---在 System.Runtime.CompilerServices.TaskWaiter.ThrowForNonSuccess(任务 任务)在 System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在System.Runtime.CompilerServices.TaskAwaiter.GetResult()处 System.Web.Http.Controllers.AuthenticationFilterResult.d_u0.MoveNext() ---来自引发异常的上一个位置的堆栈结束跟踪---在 System.Runtime.CompilerServices.TaskWaiter.ThrowForNonSuccess(任务 任务)在 System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()中 在 System.Web.Http.Dispatcher.HttpControllerDispatcher.d_u1.MoveNext()
  • 有人能帮我吗?

    解决这个问题。 在BaseApiController中,我覆盖了Initialize方法,忘记调用
    base.Initialize()
    
    就这样解决了问题。

    谢谢,你帮我省去了这么多痛苦。