2015-05-27 31 views
1

你好,我已经发布了我的网站,它是从Visual Studio本地分叉到Azure,现在每当我尝试访问该页面时,我都会得到以下异常。System.NullReferenceException发布到天蓝

[NullReferenceException: Object reference not set to an instance of an object.] 
    WebApplication1.Logic.RoleActions.AddUserAndRole() +390 
    WebApplication1.Global.Application_Start(Object sender, EventArgs e) +47 

因为它指向Logic.RoleActions和Global.Application_Start,我会在这些代码中发布代码。

RoleActions

namespace WebApplication1.Logic 
{ 
internal class RoleActions 
{ 
    internal void AddUserAndRole() 
    { 
     // Access the application context and create result variables. 
     Models.ApplicationDbContext context = new ApplicationDbContext(); 
     IdentityResult IdRoleResult; 
     IdentityResult IdUserResult; 

     // Create a RoleStore object by using the ApplicationDbContext object. 
     // The RoleStore is only allowed to contain IdentityRole objects. 
     var roleStore = new RoleStore<IdentityRole>(context); 

     // Create a RoleManager object that is only allowed to contain IdentityRole objects. 
     // When creating the RoleManager object, you pass in (as a parameter) a new RoleStore object. 
     var roleMgr = new RoleManager<IdentityRole>(roleStore); 

     // Then, you create the "canEdit" role if it doesn't already exist. 
     if (!roleMgr.RoleExists("canEdit")) 
     { 
      IdRoleResult = roleMgr.Create(new IdentityRole { Name = "canEdit" }); 
     } 

     // Create a UserManager object based on the UserStore object and the ApplicationDbContext 
     // object. Note that you can create new objects and use them as parameters in 
     // a single line of code, rather than using multiple lines of code, as you did 
     // for the RoleManager object. 
     var userMgr = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context)); 
     var appUser = new ApplicationUser 
     { 
      UserName = "[email protected]", 
      Email = "[email protected]" 
     }; 
     IdUserResult = userMgr.Create(appUser, "Pa$$word1"); 

     // If the new "canEdit" user was successfully created, 
     // add the "canEdit" user to the "canEdit" role. 
     if (!userMgr.IsInRole(userMgr.FindByEmail("[email protected]").Id, "canEdit")) 
     { 
      IdUserResult = userMgr.AddToRole(userMgr.FindByEmail("[email protected]").Id, "canEdit"); 
     } 

     if (!userMgr.IsInRole(userMgr.FindByEmail("[email protected]").Id, "canEdit")) 
     { 
      IdUserResult = userMgr.AddToRole(userMgr.FindByEmail("[email protected]").Id, "canEdit"); 
     } 
    } 
} 
} 

和全球

namespace WebApplication1 
{ 
public class Global : HttpApplication 
{ 
    void Application_Start(object sender, EventArgs e) 
     { 
      // Code that runs on application startup 
      RouteConfig.RegisterRoutes(RouteTable.Routes); 
      BundleConfig.RegisterBundles(BundleTable.Bundles); 

      // Create the custom role and user. 
      RoleActions roleActions = new RoleActions(); 
      roleActions.AddUserAndRole(); 



     } 
    } 
} 

我不明白为什么它本地工作正常,但当公布了一个问题。谢谢

+0

可能重复[什么是一个NullReferenceException,如何解决呢?(http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i -fix-it) –

回答

1

NullReferenceException很可能是由userMgr.FindByEmail("xxx")调用之一引起的。您不处理userMgr.FindByEmail方法返回null的情况,并且您直接访问它的Id属性。

1

我怀疑这是因为没有用户在Azure中使用[email protected]的电子邮件。因此,在这一行调用Id将抛出一个空引用异常。的

userMgr.FindByEmail("[email protected]").Id 
+0

是的,它就是这样。 –