表单身份验证ASP.NET Web表单

wnvonmuf  于 2023-10-21  发布在  .NET
关注(0)|答案(1)|浏览(114)

我有一个ASP.NETWebForms应用程序,它使用表单身份验证。对于不需要认证的页面,我有一个单独的文件夹。所有其他页面都在主文件夹中并使用身份验证。这一切工作。
应用程序现在需要提供图像。所以,如果我有一个像https://mysite/{id}这样的URL,我会在数据库中查找指定id的图像并提供图像。为了提供图像,我在global.asax中的BeginRequest方法中编写了代码。我检查URL是否是https://mysite/{id}类型,并通过执行response.write来提供图像,并写入图像的字节。
当我执行response.write时,表单身份验证启动并将我发送到登录页面。
所以,对于https://mysite/{id}的url,我不想做表单身份验证,但我不知道如何关闭这种类型的url的身份验证,而不关闭我想要身份验证的页面的身份验证。
有没有办法在BeginRequest方法中不进行表单身份验证?在BeginRequest中是否有可以调用的属性或方法来关闭表单身份验证?

b1zrtrql

b1zrtrql1#

有几种方法:
1.(EASYONE)根据此DOC使用web.config中的表单身份验证配置来排除URL。您可以为要排除的URL模式添加一个具有path属性的元素,并在元素上设置enabled=“false”:

<location path="images/">
  <system.web>
    <authorization>
      <deny users="?" />
    </authorization>
  </system.web>
</location>

2.在您的BeginRequest处理程序中,检查请求的URL,如果它匹配您排除的模式,则调用HttpContext.Current.User = new GenericPrincipal(new GenericIdentity(string.Empty),null);这将在表单auth模块执行之前手动设置匿名用户主体,或者您可以创建一个自定义表单身份验证模块来覆盖默认模块,并在OnAuthenticate方法中添加逻辑以跳过基于URL的身份验证。

相关问题