我正在使用HttpModule尝试将用户重定向到登录页面,如果他们没有经过身份验证,但由于某种原因,它只是无限地重定向页面而不会登陆任何地方。
这是模块:
using System;
using System.Web;
using System.Web.Security;
public class AuthenticationModule : IHttpModule
{
public AuthenticationModule()
{
}
public string ModuleName
{
get
{
return "AuthenticationModule";
}
}
public void Init(HttpApplication app)
{
app.BeginRequest += (new EventHandler(Application_BeginRequest));
}
private void Application_BeginRequest(object source, EventArgs e)
{
HttpApplication app = (HttpApplication)source;
HttpContext context = app.Context;
HttpRequest request = context.Request;
HttpResponse response = context.Response;
if (!request.IsAuthenticated && !request.RawUrl.Contains(FormsAuthentication.LoginUrl))
{
FormsAuthentication.RedirectToLoginPage();
}
}
public void Dispose() { }
}
我不记得曾经使用过HttpModules,所以我不确定什么不起作用。
我该如何解决这个问题?
答案 0 :(得分:1)
request.RawUrl是我在浏览器中输入的URL。您的支票request.RawUrl.Contains(FormsAuthentication.LoginUrl)
区分大小写。
此外,没有对资源的检查。因此,每个图像,css文件等请求都将重定向到登录页面。您需要检查被调用的资源是否需要身份验证。
编辑(提前点击保存按钮)
此外,我会在AuthenticateRequest