我正在尝试使用.net mvc建立记录未经授权访问控制器/操作的最佳方法,基本上要求是:
1。 2我已部分实现,我创建了一个特定的Authorization属性,该属性扩展了Authorize操作过滤器,该过滤器覆盖了默认的HandleUnauthorizedRequest方法,以检查一些额外的东西并返回带有响应代码403的HttpResult。
我无法实现其他部分,将信息记录到数据库中。当然有一个简单的解决方案,从自定义属性本身记录它,但感觉不对,感觉就像我让属性本身更聪明然后它应该是,在一天结束它应该知道关于限制访问而不是将信息记录到数据库。
还有另一种解决方案,当它到达Unauthorized页面本身时记录它,感觉不是很糟糕,但仍然感觉不太正确。
我个人希望能够在请求链中的某个地方处理它,但据我所知,我无法访问所有正确的信息。我试过环顾四周,但没有找到任何适合我们想要的解决方案。
是否有人在那里实施了与我们的目标相似的内容,或者对于应该在何处实施这些内容有任何想法。
谢谢, MD
答案 0 :(得分:2)
创建一个新的IHttpModule并在EndRequest事件上记录作弊黑客......
E.g。
public class UnAuthorizedLoggerHttpModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.EndRequest += ContextOnEndRequest;
}
private void ContextOnEndRequest(object sender, EventArgs eventArgs)
{
var app = sender as HttpApplication;
if (app == null) return;
if (app.Response.StatusCode == (int)HttpStatusCode.Forbidden)
{
//Log the error
//All the user info should be in app.Request
}
}
}