用户.IsInRole不能在服务器上工作

本文关键字:工作 服务器 IsInRole 不能 用户 | 更新日期: 2023-09-27 17:52:36

我使用的是ASP。。NET 2012, SQL Server 2008和c#为我的网站。当我执行以下代码时:

if(User.IsInRole("Admin"))
    Response.Redirect("test.aspx");

Default.aspx.cs和运行在Visual Studio本地没有错误。在部署我的网站并尝试使用Admin Role中的用户登录后,服务器上出现以下错误:

时发生与网络相关或特定于实例的错误建立到SQL Server的连接。未找到服务器或无法访问。验证实例名是否正确SQL Server已配置为允许远程连接。(供应商:SQL网络接口,错误:26 -定位服务器/实例错误指定)

我的ASP。. NET成员数据库位于主机上。我应该在Default.aspx.cs使用连接字符串吗?如果是,我该如何写呢?

我确定我登录的UserAdmin Role中。

web.config:

<configuration>
  <appSettings>
    <add key="ValidationSettings:UnobtrusiveValidationMode" value="None"/>
  </appSettings>
  <connectionStrings>
    <add name="MembersConnectionString" 
         connectionString="workstation id=mssql;packet size=4096;user id=shahi_SQLLogin_1;pwd=password;data source=mssql;persist security info=False;initial catalog=akhbarrr" />
    <add name="SabteAKhabar" 
         connectionString="workstation id=mssql;packet size=4096;user id=shahi_SQLLogin_1;pwd=password;data source=mssql;persist security info=False;initial catalog=akhbarrr" />
    <add name="ConnectionString" 
         connectionString="workstation id=mssql;packet size=4096;user id=shahi_SQLLogin_1;pwd=password;data source=mssql;persist security info=False;initial catalog=akhbarrr" />
    <add name="akhbarrConnectionString" 
         connectionString="workstation id=mssql;packet size=4096;user id=shahi_SQLLogin_1;pwd=password;data source=mssql;persist security info=False;initial catalog=akhbarrr"
         providerName="System.Data.SqlClient" />
  </connectionStrings>
  <system.web>
    <customErrors mode="Off">
      <error statusCode="403" redirect="access.aspx"/>
      <error statusCode="404" redirect="nofile.aspx"/>
    </customErrors>
    <anonymousIdentification enabled="true"/>
    <profile enabled="true" defaultProvider="AspNetSqlProfileProvider">
      <properties>
        <add name="FirstName" allowAnonymous="false"/>
        <add name="LastName" allowAnonymous="false"/>
        <add name="AkharinMadrak" allowAnonymous="false"/>
        <add name="Reshte" allowAnonymous="false"/>
        <add name="Gerayesh" allowAnonymous="false"/>
        <add name="NahveAshnayi" allowAnonymous="false"/>
        <add name="Address" allowAnonymous="false"/>
        <add name="PostalKod" allowAnonymous="false"/>
        <add name="City" allowAnonymous="false"/>
        <add name="Town" allowAnonymous="false"/>
        <add name="Number" allowAnonymous="false"/>
        <add name="BirthDay" type="System.DateTime" allowAnonymous="false"/>
      </properties>
    </profile>
    <authorization>
      <allow roles="Managers"/>
      <allow roles="Admin"/>
      <allow roles="AdminAsli"/>
    </authorization>
    <authentication mode="Forms">
      <forms timeout="5" cookieless="AutoDetect" protection="All"/>
    </authentication>
    <membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
      <providers>
        <clear/>
        <add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="MembersConnectionString" applicationName="MyApplication" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" passwordFormat="Hashed"/>
      </providers>
    </membership>
    <roleManager enabled="true"/>
    <pages validateRequest="false" enableEventValidation="false" viewStateEncryptionMode="Never" enableViewStateMac="false"/>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Extensions.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
        <add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
      </assemblies>
    </compilation>
    <httpRuntime/>
    <machineKey validationKey="1234567890123456789012345678901234567890AAAAAAAAAA" decryptionKey="123456789012345678901234567890123456789012345678" validation="SHA1" decryption="Auto"/>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <handlers>
      <add name="MSCaptcha" path="CaptchaImage.axd" verb="GET" type="MSCaptcha.CaptchaImageHandler, MSCaptcha" preCondition="integratedMode,runtimeVersionv2.0"/>
    </handlers>
  </system.webServer>
  <system.net>
    <mailSettings>
      <smtp from="xxxxxx@gmail.com">
        <network host="smtp.gmail.com" password="xxxxxx" port="587" userName="farzanehsd@gmail.com" enableSsl="true"/>
      </smtp>
    </mailSettings>
  </system.net>
</configuration>

用户.IsInRole不能在服务器上工作

您已经定义了成员资格提供程序所需的所有细节—但是角色提供程序还没有定义!

<!-- you're providing all the details for the membership provider ...... -->
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
   <providers>
      <clear/>
      <add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="MembersConnectionString" applicationName="MyApplication" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" passwordFormat="Hashed"/>
      </providers>
</membership>
<!-- but nothing at all really for the role provider. -->
<roleManager enabled="true"/>

请参阅Scott Allen的这篇博客文章,其中介绍了如何定义角色提供者的详细信息,定义在哪里查找信息以及使用什么角色提供者——并像您为角色提供者的成员所做的一样!

这与用户或角色无关。错误消息告诉您哪里出了问题以及该怎么做:您的程序无法访问SQL数据库,因此您需要检查它是否正确设置。具体来说,检查:

  • SQL server正在运行
  • 你的SQL服务器被设置为接受来自程序的连接你的程序在Web.config文件
  • 中有正确的连接字符串

你的c#代码没有错误,因为错误信息清楚地告诉你。

连接数据库错误,很可能是由于配置文件中缺少或不正确的条目引起的。

示例配置:

<connectionStrings>
    <add name="MembersConnectionString" 
        connectionString="Data Source=akhbarrr.mssql.somee.com;packet size=4096;User Id=YourUserID;Password=YourPassword;persist security info=False;Initial Catalog=akhbarrr" />
    <add name="SabteAKhabar" 
        connectionString="Data Source=akhbarrr.mssql.somee.com;packet size=4096;User Id=YourUserID;Password=YourPassword;persist security info=False;Initial Catalog=akhbarrr" />
    <add name="ConnectionString" 
        connectionString="Data Source=akhbarrr.mssql.somee.com;packet size=4096;User Id=YourUserID;Password=YourPassword;persist security info=False;Initial Catalog=akhbarrr" />
    <add name="akhbarrConnectionString" 
        connectionString="Data Source=akhbarrr.mssql.somee.com;packet size=4096;User Id=YourUserID;Password=YourPassword;persist security info=False;Initial Catalog=akhbarrr"
      providerName="System.Data.SqlClient" />
</connectionStrings>

参考/延伸阅读:有关ASP配置方面的更多信息。. NET会员资格请参见:http://msdn.microsoft.com/en-us/library/6e9y4s5t(v=vs.100).aspx

选择答案

因为您的会员应用程序名称称为MyApplication。您能确保您的aspnet_Applications数据库表中的ApplicationId值与您的角色的aspnet_Roles表中的值匹配吗?

aspnet_Roles表中,您将找到当前ASP的列表。. NET成员角色。您能确保您的角色在那里存在并且ApplicationId值与您的aspnet_Applications表中的值匹配吗?

您可以运行此查询来查看您设置了哪些角色以及针对哪些ASP。. NET会员申请:

SELECT APP.ApplicationId, APP.ApplicationName, ROLES.RoleName, ROLES.RoleId 
FROM dbo.aspnet_Applications AS APP
JOIN dbo.aspnet_Roles AS ROLES ON APP.ApplicationId = ROLES.ApplicationId