我有一个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
中是否有可以调用的属性或方法来关闭表单身份验证?
1条答案
按热度按时间b1zrtrql1#
有几种方法:
1.(EASYONE)根据此DOC使用web.config中的表单身份验证配置来排除URL。您可以为要排除的URL模式添加一个具有path属性的元素,并在元素上设置enabled=“false”:
2.在您的BeginRequest处理程序中,检查请求的URL,如果它匹配您排除的模式,则调用HttpContext.Current.User = new GenericPrincipal(new GenericIdentity(string.Empty),null);这将在表单auth模块执行之前手动设置匿名用户主体,或者您可以创建一个自定义表单身份验证模块来覆盖默认模块,并在OnAuthenticate方法中添加逻辑以跳过基于URL的身份验证。