C# HttpAuthenticationContext.请求不能为null
我正在使用ASP.NEt MVC 5 WEBAPI 2.2和OWIN+Identity与Autofac开发应用程序, 调用API控制器的方法时,我收到错误HttpAuthenticationContext.Request不能为null。。 调用了API控制器构造函数,但未调用方法。 下面是我的档案 Global.asxC# 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()
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方法给出错误
base.Initialize()代码>
就这样解决了问题。谢谢,你帮我省去了这么多痛苦。