【发布时间】:2015-07-06 15:44:36
【问题描述】:
标题类型描述了问题。我正在尝试使用角色授权,并且我已成功创建用户和角色。我还可以为用户分配角色。我已验证以下操作确实会修改数据库表。但是,当我在控制器方法上使用角色授权时,我会遇到某种 SQL Server 超时。
例如:
[Authorize(Roles="Admin")]
public ActionResult Admin()
{
ViewBag.Message = "Your admin page.";
var context = new IdentityDbContext();
IDbSet<IdentityRole> roles = context.Roles;
List<string> roleList = new List<string>();
foreach (IdentityRole role in roles)
roleList.Add(role.Name);
ViewBag.Roles = roleList;
IDbSet<IdentityUser> users = context.Users;
List<string> userList = new List<string>();
foreach (IdentityUser user in users)
userList.Add(user.UserName);
ViewBag.Users = userList;
return View();
}
但这会随着响应超时:
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)
任何帮助将不胜感激。您可以在下面找到我的 SQL 连接字符串以及创建角色和将用户添加到角色的方法。谢谢
SQL 连接字符串:
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=192.168.10.160,1433;Initial Catalog=PriceConfigurator;User Id=PriceConfiguratorDBA;Password=*********" providerName="System.Data.SqlClient" />
</connectionStrings>
角色/用户管理:
[HttpPost]
public ActionResult AddToUser(FormCollection collection)
{
try
{
var roleManager = new RoleManager<Microsoft.AspNet.Identity.EntityFramework.IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
var userManager = new UserManager<Microsoft.AspNet.Identity.EntityFramework.IdentityUser>(new UserStore<IdentityUser>(new ApplicationDbContext()));
var context = new IdentityDbContext();
var userName = collection["AddUserRoleUsername"];
IdentityUser user = context.Users.Where(x => x.UserName == userName).FirstOrDefault();
var roleName = collection["AddUserRoleNameList"];
userManager.AddToRole(user.Id, roleName);
return Json(userName + " added to " + roleName, JsonRequestBehavior.DenyGet);
}
catch (Exception ex)
{
return Json("Error occured: " + ex.Message, JsonRequestBehavior.DenyGet);
}
}
[HttpPost]
public ActionResult RemoveFromUser(FormCollection collection)
{
try
{
var roleManager = new RoleManager<Microsoft.AspNet.Identity.EntityFramework.IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
var userManager = new UserManager<Microsoft.AspNet.Identity.EntityFramework.IdentityUser>(new UserStore<IdentityUser>(new ApplicationDbContext()));
var context = new IdentityDbContext();
var userName = collection["RemoveUserRoleUsername"];
IdentityUser user = context.Users.Where(x => x.UserName == userName).FirstOrDefault();
var roleName = collection["RemoveUserRoleNameList"];
userManager.RemoveFromRole(user.Id, roleName);
return Json(userName + " removed from " + roleName, JsonRequestBehavior.DenyGet);
}
catch (Exception ex)
{
return Json("Error occured: " + ex.Message, JsonRequestBehavior.DenyGet);
}
}
我还尝试在我的 web.config 中覆盖成员资格提供程序
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<membership>
<providers>
<clear/>
<add name="AspNetSqlRoleProvider" connectionStringName="DefaultConnection" applicationName="/" type="System.Web.Security.SqlRoleProvider"/>
<add name="AspNetSqlProfileProvider" connectionStringName="DefaultConnection" applicationName="/" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression="" />
</providers>
</membership>
<roleManager enabled="true">
</roleManager>
【问题讨论】:
标签: c# sql-server asp.net-mvc