当项目在FormsAuthentication下时,对一个文件夹(页面)进行身份验证 - 无

时间:2010-03-02 16:11:17

标签: asp.net authentication web-config forms-authentication

我在asp.net 2.0上有一个带有命名空间Admin的WebApplication。我有项目的表单验证模式。

    <authentication mode="Forms">
        <forms name="ASP_XML_Form" loginUrl="Login.aspx" protection="All" timeout="30"
               path="/" requireSSL="false" slidingExpiration="true"
               cookieless="AutoDetect">
        </forms>

    </authentication>

现在,我尝试为Authentificatied用户共享一个文件夹(一个内页):

<location path="Recovery">
    <system.web>
        <roleManager enabled="false" >
        </roleManager>

        <authentication mode="None">
        </authentication>

        <authorization>
            <allow users="*" />
        </authorization>

        <httpHandlers>
            <remove verb="GET" path="image.aspx" />
            <remove verb="GET" path="css.aspx" />
        </httpHandlers>
    </system.web>
</location>

但是当我在共享文件夹中创建页面时,它无法访问程序集。 我看到这样的错误:

  

无法加载文件或程序集   'Admin'或其中一个依赖项。   系统找不到该文件   指定。

它还向我显示错误:

  

ASP.NET运行时错误:这是一个错误   使用注册为的部分   allowDefinition的= 'MachineToApplication'   超出应用水平。这个错误   可以由虚拟目录引起   未配置为应用程序   在IIS中。

当项目在FormsAuthentifications下时,是否有人知道如何共享(Authentification None)一个文件夹(页面)?

2 个答案:

答案 0 :(得分:4)

您应该在<location>元素中包含以下内容:

<location path="Recovery">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>

(如果你真的需要删除它们,你也可以包含处理程序元素。)

在非应用程序级别web.config中不允许使用Authentication和RoleManager元素,因此您无法在<location>元素中定义它们。

编辑以回复评论

很抱歉,澄清一下:您的位置元素太多 - <authentication><roleManager>元素不允许(除非/ Recovery是IIS中的一个应用程序,并且肯定会导致您在问题中报告的第二个错误,这些错误需要在页面正常显示之前删除。

您是否在任何地方看到“无法找到程序集”错误,或者只是在Recovery文件夹的页面上?该文件夹是否在IIS中标记为“应用程序”?如果是这样,您需要将站点的二进制文件复制到/ Recovery下的/ bin文件夹中,或者删除IIS中该文件夹的应用程序设置。

我刚才意识到,当我的意思是“身份验证元素”时,我在前两部分中说了“授权元素” - 如果感到困惑,请对不起。

编辑以回复第二条评论

基本上,在IIS中,您可以拥有一个或多个网站 - 这些网站是网站的根,并被定义为应用程序起点。

IIS还允许您将网站的子文件夹配置为应用程序,这允许您执行以下操作:

  • 更改仅允许在应用程序级别设置的配置设置
  • 在不同的内存空间中运行部分网站
  • 以不同的用户帐户运行部分网站

但是,如果您确实将文件夹设置为应用程序,则需要确保所需的所有代码都可以访问,并且当您启动新应用程序时,需要在root / bin(或/ app_code)文件夹中编写代码该文件夹无法再访问该文件夹。

通常,在IIS管理器中,您可以单击该文件夹并删除该应用程序,以便它从根目录继承。

答案 1 :(得分:-1)

检查代码隐藏文件中的命名空间 - 看起来你可能有一些冲突(你是否在另一个文件夹中创建了文件,然后将其物理移动到共享文件夹)。 您还必须设置共享文件夹的位置属性,以便为未经过身份验证的用户共享