我有一个使用表单身份验证的 ASP.NET Webforms 应用程序。对于不需要身份验证的页面,我将其放在单独的文件夹中。所有其他页面都位于主文件夹中并使用身份验证。这一切都有效。
应用程序现在需要提供图像。因此,如果我有一个像
https://mysite/{id}
这样的 url,我会在数据库中查找指定 id
的图像并提供该图像。为了提供图像,我在 BeginRequest
中的 global.asax
方法中有代码。我检查 url 是否为 https://mysite/{id}
类型,并通过执行 response.write
来提供图像并写入图像的字节。
当我执行
response.write
时,表单身份验证将启动并将我发送到登录页面。
因此,对于
https://mysite/{id}
的网址,我不想进行表单身份验证,但我不知道如何关闭此类网址的身份验证而不关闭我确实想要身份验证的页面的身份验证。
有没有办法在
BeginRequest
方法中不进行表单验证?是否有我可以在 BeginRequest
中调用的属性或方法来关闭表单身份验证?
有几种方法:
1.(EASYONE)根据此 DOC 使用 web.config 中的表单身份验证配置来排除 URL。您可以为要排除的 URL 模式添加带有路径属性的元素,并在该元素上设置启用=“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);这将在表单身份验证模块执行之前手动设置匿名用户主体,或者您可以创建一个覆盖默认身份验证模块的自定义表单身份验证模块,并在 OnAuthenticate 方法中添加逻辑以跳过基于 URL 的身份验证。