C# 为什么在Membership.GetUser().Email上出现与网络相关或特定于实例的错误?
下面是应用程序崩溃的控制器方法C# 为什么在Membership.GetUser().Email上出现与网络相关或特定于实例的错误?,c#,asp.net-mvc,database,asp.net-identity,C#,Asp.net Mvc,Database,Asp.net Identity,下面是应用程序崩溃的控制器方法 [HttpGet] public ActionResult SendInvitation(Guid appointmentId) { if (User.Identity.IsAuthenticated) { var ownerEmail = Membership.GetUser().Email; //error on this line _appointmentRepository.SendEmailToOwner(
[HttpGet]
public ActionResult SendInvitation(Guid appointmentId)
{
if (User.Identity.IsAuthenticated)
{
var ownerEmail = Membership.GetUser().Email; //error on this line
_appointmentRepository.SendEmailToOwner(ownerEmail, appointmentId);
}
return Content("message sent to owner");
}
每当我运行我的应用程序时,一切都很好,数据库读取、写入、创建用户使用Asp.net标识一切都很顺利。但在控制器的方法中,当试图获取用户的电子邮件时,它会崩溃
当我为该方法设置断点时,它将通过User.Identity.IsAuthenticated,并在尝试访问电子邮件时崩溃
这是浏览器中显示的错误:
堆栈跟踪:
[SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)]
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +5352431
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +244
System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, Boolean withFailover) +5363103
System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover) +145
System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout) +922
System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance) +307
System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData) +518
System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) +5365937
System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions) +38
System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) +5368242
System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +146
System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +16
System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) +94
System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) +110
System.Data.SqlClient.SqlConnection.Open() +96
System.Web.Management.SqlServices.GetSqlConnection(String server, String user, String password, Boolean trusted, String connectionString) +76
[HttpException (0x80004005): Unable to connect to SQL Server database.]
System.Web.Management.SqlServices.GetSqlConnection(String server, String user, String password, Boolean trusted, String connectionString) +131
System.Web.Management.SqlServices.SetupApplicationServices(String server, String user, String password, Boolean trusted, String connectionString, String database, String dbFileName, SqlFeatures features, Boolean install) +89
System.Web.Management.SqlServices.Install(String database, String dbFileName, String connectionString) +27
System.Web.DataAccess.SqlConnectionHelper.CreateMdfFile(String fullFileName, String dataDir, String connectionString) +386
编辑1:
我创建了自己的ApplicationUser类,该类继承自deafult IdentityUser类
那是
公共类应用程序用户:IdentityUser
{
[必需]
公共重写字符串用户名{get;set;}
//public string Password { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
[Required]
public string Email { get; set; }
public Boolean IsApproved { get; set; }
public string Company { get; set; }
[DataType(DataType.MultilineText)]
public string Comment { get; set; }
[DataType(DataType.PhoneNumber)]
public string Phone{ get; set; }
public Boolean IsLockedOut { get; set; }
public DateTime DateTimeRegistered { get; set; }
public DateTime? LastLoginDateTime { get; set; }
public DateTime? LastActivityDateTime { get; set; }
public int PasswordFailureSinceLastSuccess { get; set; }
public DateTime? LastPasswordFailureDate { get; set; }
public string PasswordVerificationToken { get; set; }
public DateTime? PasswordVerificationTokenExpirationDateTime { get; set; }
public string ConfirmationToken { get; set; }
public virtual ICollection<Appointment> Appointments { get; set; }
public int LicenseId { get; set; }
public License License { get; set; }
}
现在,如果我发现用户有类似_db.Users.FindGuidID的东西;然后通过电子邮件获取用户实例
这就是我尝试使用默认成员身份获取电子邮件时出错的原因吗?ASP.NET Identity引入了一种全新的体系结构,它不使用旧的成员身份提供程序概念,这是您在调用时使用的:
var ownerEmail = Membership.GetUser().Email;
下面是您应该如何访问ASP.NET Identity中的用户信息
UserManager<ApplicationUser> UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
var user = UserManager.FindById(User.Identity.GetUserId());
if (user != null)
_appointmentRepository.SendEmailToOwner(user.Email, appointmentId);
UserManager<ApplicationUser> UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
var user = UserManager.FindById(User.Identity.GetUserId());
if (user != null)
_appointmentRepository.SendEmailToOwner(user.Email, appointmentId);