C#关于不调用我已调用的函数的异常

时间:2014-01-18 00:59:23

标签: c# asp.net asp.net-mvc security asp.net-mvc-4

我正在使用ASP.NET MVC4开发应用程序。我在global.cs上调用此代码

    if (!WebSecurity.Initialized)
        WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);

作为Application_Start()函数的一部分,如下所示:

protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            AuthConfig.RegisterAuth();

            if (!WebSecurity.Initialized)
                WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);


        }

如果我是正确的,那么在项目的最初阶段执行。

我在控制器上也有这个代码

 SimpleMembershipProvider provider = new SimpleMembershipProvider();
 MembershipUser user = provider.GetUser("testUser", false);

但是,第二个代码会产生异常

System.InvalidOperationException was unhandled by user code
  HResult=-2146233079
  Message=You must call the "WebSecurity.InitializeDatabaseConnection" method before you call any other method of the "WebSecurity" class. This call should be placed in an _AppStart.cshtml file in the root of your site.
  Source=WebMatrix.WebData
  StackTrace:
       at WebMatrix.WebData.SimpleMembershipProvider.get_PreviousProvider()
       at WebMatrix.WebData.SimpleMembershipProvider.GetUser(String username, Boolean userIsOnline)
       at UKFutureLiving_Team5.Controllers.TenantController.House() in c:\Users\nekta_000\Documents\Visual Studio 2013\Projects\UKFutureLiving_Team5\UKFutureLiving_Team5\Controllers\TenantController.cs:line 51
       at lambda_method(Closure , ControllerBase , Object[] )
       at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
       at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
       at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
       at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41()
       at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _)
       at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
       at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
       at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33()
       at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
  InnerException: 

并显示消息"you must call the "WebSecurity.InitializeDatabaseConnection" method before you call any other method of the "WebSecurity" class. This call should be placed in an _AppStart.cshtml file in the root of your site."

你知道为什么会这样,以及如何解决它?

0 个答案:

没有答案