好吧,我有一个很大的问题,我正在努力解决,但我无法做到,所以我需要你的帮助.我在asp.net 4.0中有一个Web应用程序,我实现了自定义成员资格和角色提供程序.当我打开应用程序主页时,它连接到数据库并检索一些信息.还有一个登录表单,当我登录时,它通过数据库验证用户并将我重定向到保留页面,但出现此错误:
建立与SQL Server的连接时发生与网络相关或特定于实例的错误.服务器未找到或无法访问.验证实例名称是否正确,以及SQL Server是否配置为允许远程连接.(提供程序:SQL网络接口,错误:26 - 查找指定的服务器/实例时出错)
描述:
在执行当前Web请求期间发生了未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.
例外细节:
System.Data.SqlClient.SqlException:建立与SQL Server的连接时发生与网络相关或特定于实例的错误.服务器未找到或无法访问.验证实例名称是否正确,以及SQL Server是否配置为允许远程连接.(提供程序:SQL网络接口,错误:26 - 查找指定的服务器/实例时出错)
来源错误:
在执行当前Web请求期间生成了未处理的异常.可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息.
我尝试了很多东西,我在stackoverflow中找到了一些解决方案,但没有任何效果.这是我的连接线:
<connectionStrings>
<clear/>
<remove name="LocalSqlServer"/>
<add name="LocalSqlServer" connectionString="Data Source=MSSQL2008-1;Initial Catalog=agency;
Integrated Security=False;User ID=adis_agency;Password=niarda2012;Connect Timeout=180;Encrypt=False;
Packet Size=4096" providerName="System.Data.SqlClient" />
<add name="AgencyConn" connectionString="Data Source=MSSQL2008-1;Initial Catalog=agency;
Integrated Security=False;User ID=adis_agency;Password=niarda2012;Connect Timeout=180;Encrypt=False;
Packet Size=4096" providerName="System.Data.SqlClient"/>
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
以下是成员资格和角色管理器web.config部分:
<membership defaultProvider="AuthProvider">
<providers>
<clear/>
<add name="AuthProvider" type="AuthenticationProvider" applicationName="~/Reserved/" connectionStringName="AgencyConn"/>
</providers>
</membership>
<roleManager enabled="true" defaultProvider="MyRoleProvider">
<providers>
<clear/>
<add name="MyRoleProvider" type="RoleAccessProvider" connectionStringName="AgencyConn"/>
</providers>
</roleManager>
Run Code Online (Sandbox Code Playgroud)
请任何人帮忙弄清楚什么是错的?
asp.net asp.net-membership roleprovider membership-provider sql-server-2008
我正在创建一个自定义角色提供程序,我设置了一个Authorize属性,在我的控制器中指定一个角色,它工作正常,如下所示:
[Authorize(Roles="SuperAdmin")]
public class SuperAdminController : Controller
...
Run Code Online (Sandbox Code Playgroud)
但是当用户无法访问此控制器时,他将被重定向到登录页面.如何将他重定向到"AcessDenied.aspx"页面?
无论出于何种原因,我正在处理的网站(经过一段时间的停顿)开始尖叫关于asp.net成员资格的sql server连接.我正在使用没有asp.net成员资格的mysql,所以很奇怪.但是,为了确保我已经决定删除与它相关的任何内容,包括角色提供者.
我已将这些添加到web.config中
<membership>
<providers>
<clear />
</providers>
</membership>
<roleManager enabled="false">
<providers>
<clear />
</providers>
</roleManager>
<profile enabled="false">
<providers>
<clear />
</providers>
</profile>
Run Code Online (Sandbox Code Playgroud)
但是,它仍然会抛出异常:"配置错误,无法找到默认角色提供程序"..我能做什么?
在ASP.NET页面,存在HttpContext的模块或处理程序内部时,如何获取对当前RoleProvider实例的引用?
它是在调用IPrincipal.IsInRole(..)方法时用于授权的提供程序.默认情况下,或者从配置,我的提供程序似乎是一个SqlRoleProvider实例,由我在运行应用程序时给出的错误.
我想在运行时检查提供程序的类型,以提供有关实际使用哪个提供程序的反馈.
我正在使用表单身份验证创建一个MVC应用程序.我正在对活动目录进行身份验证,因此创建了一个自定义RoleProvider.我的应用程序只关注一小部分角色,到目前为止我一直在web.config的appSettings部分中定义:
<appSettings>
<add key="DirectorRole" value="Domain\Directors" />
<add key="ManagementRole" value="Domain\Managers" />
...
</appSettings>
Run Code Online (Sandbox Code Playgroud)
但是我遇到了这种方法的几个问题:
[Authorize(Roles = ConfigurationManager.AppSettings["DirectorRole"])]因为它不会编译所以我必须再次指定组的名称:[Authorize(Roles = "Domain\\Directors")].似乎必须有一个更好/可重用的方法来定义web.config中的角色,有人能指出我正确的方向吗?
我正在构建一个MVC4应用程序,供企业环境内部使用.我使用Windows身份验证,工作正常,但我在使用Active Directory组作为授权角色时遇到了麻烦.
我的Web.config看起来像这样:
<authentication mode="Windows" />
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
<providers>
<clear />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
</providers>
</roleManager>
<authorization>
<deny users="?" />
</authorization>
Run Code Online (Sandbox Code Playgroud)
当我使用用户授权时,它工作正常:
[Authorize(Users = @"DOMAIN\User1, DOMAIN\User2")]
public ActionResult Create()
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
但是当我使用角色时,它只是不允许该组中的用户访问此操作:
[Authorize(Roles = @"Domain\Group")]
public ActionResult Create()
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
我也试过指定组不带域正如我在其他阅读的答复,但没有运气......我想我错过了在Web.config的东西,但我不知道是什么...
我避免使用自定义角色提供程序,因为MVC4应该在没有自定义角色提供程序的情况下实现这一点(或者至少是我认为的那样)
谁能帮我这个?
提前致谢!
对此我不知所措,昨天它工作正常,今天它似乎被破坏了:
这一行产生错误:
@if (Roles.IsUserInRole(HttpContext.Current.User.Identity.Name, "Admin"))
Run Code Online (Sandbox Code Playgroud)
错误是:无法连接到SQL Server数据库.
整个例外:
System.Web.HttpException was unhandled by user code
HResult=-2147467259
Message=Unable to connect to SQL Server database.
Source=System.Web
ErrorCode=-2147467259
WebEventCode=0
StackTrace:
at System.Web.DataAccess.SqlConnectionHelper.CreateMdfFile(String fullFileName, String dataDir, String connectionString)
at System.Web.DataAccess.SqlConnectionHelper.EnsureDBFile(String connectionString)
at System.Web.DataAccess.SqlConnectionHelper.GetConnection(String connectionString, Boolean revertImpersonation)
at System.Web.Security.SqlRoleProvider.GetRolesForUser(String username)
at WebMatrix.WebData.SimpleRoleProvider.GetRolesForUser(String username)
at System.Web.Security.RolePrincipal.IsInRole(String role)
at System.Web.Security.Roles.IsUserInRole(String username, String roleName)
at ASP._Page_Views_Shared__LoginPartial_cshtml.Execute() in e:\LeasingWeb\LeasingWeb\Views\Shared\_LoginPartial.cshtml:line 10
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)
at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext …Run Code Online (Sandbox Code Playgroud) 在MVC4中,我<authentication mode="Windows"/>在web.config中启用并创建了一个自定义角色提供程序,然后自动为您包装WindowsIdentitya RolePrincipal.工作就像一个魅力.
你会如何使用OWIN和/或Microsoft.ASPNET.Identity在MVC5中执行此操作?
authentication roleprovider windows-identity owin asp.net-mvc-5
当我实现RoleProvider类并调用Roles.IsUserInRole(字符串用户名,字符串roleName)时,代码执行首先转到方法'GetRolesForUser(string username)'.为什么是这样?当我只是在寻找该用户是否属于一个角色的单一值时,我不想迭代所有角色.这是.NET的角色提供程序类的限制还是我可以做些什么来控制代码的执行?
这是调用代码
if (Roles.IsUserInRole(CurrentUser.UserName, "Teacher")) {
Run Code Online (Sandbox Code Playgroud)
这是IsUserInRole的实现
public override bool IsUserInRole(string username, string roleName) { return true; }
Run Code Online (Sandbox Code Playgroud)
但代码GetRolesForUser始终首先实现:
public override string[] GetRolesForUser(string username) {
string[] roles = GetAllRoles();
List<string> userRoles = new List<string>();
foreach (string role in roles) {
if (IsUserInRole(username, role)) {
userRoles.Add(role);
}
}
return userRoles.ToArray();
}
Run Code Online (Sandbox Code Playgroud)