Orchardcms 我应该把我希望总是为每个请求运行的代码放在哪里?

Orchardcms 我应该把我希望总是为每个请求运行的代码放在哪里?,orchardcms,orchardcms-1.9,Orchardcms,Orchardcms 1.9,也许这更像是一个ASP.NETMVC问题,而不是一个Orchard问题,但我对这两个问题都比较陌生,我不知道这两种情况的答案 从技术上讲,ASP.NET MVC应用程序没有一个单一的入口点,因此,我应该将希望每次有人访问任何页面时始终运行的代码放在哪里,而不考虑层、来源或权限?有没有具体的果园方式 如果有区别的话,我现在特别想做的就是限制访问我网站的IP范围。我想查看每个传入的请求,并检查用户是否已通过身份验证,或者IP是否在我在自定义设置中配置的允许范围内 我可以想出一些快速而肮脏的方法来实现

也许这更像是一个ASP.NETMVC问题,而不是一个Orchard问题,但我对这两个问题都比较陌生,我不知道这两种情况的答案

从技术上讲,ASP.NET MVC应用程序没有一个单一的入口点,因此,我应该将希望每次有人访问任何页面时始终运行的代码放在哪里,而不考虑层、来源或权限?有没有具体的果园方式

如果有区别的话,我现在特别想做的就是限制访问我网站的IP范围。我想查看每个传入的请求,并检查用户是否已通过身份验证,或者IP是否在我在自定义设置中配置的允许范围内


我可以想出一些快速而肮脏的方法来实现这一点,比如将签入
布局
并在我的所有区域周围包装一个条件,或者实现
IThemeSelector
以切换到不同的主题,但我希望正确地执行该操作。

要实现这一点,您应该做些什么,正在实现新的
IActionFilter
IAuthorizationFilter
,如下所示:

公共类CheckAccessFilter:FilterProvider、IActionFilter、IAAuthorizationFilter{
ActionExecuting(ActionExecutingContext filterContext)上的公共无效{
//在这里,您可以检查传入的请求,以及系统将如何处理它,
//在执行操作之前
}
已执行ActionExecuted(ActionExecutedContext筛选器上下文)的公共无效{
}
授权时的公共无效(AuthorizationContext filterContext){
//您可以在这里授权任何请求
}
}
但是,如果您只希望基于内容项(如:小部件、页面、投影)进行授权,则可以实现
iauthorizationserviceventhandler

公共类IPAuthorizationEventHandler:IAAuthorizationServiceEventHandler{
公共无效检查(CheckAccessContext上下文){
}
public void Adjust(CheckAccessContext上下文){
}
public void Complete(CheckAccessContext上下文){
}
}

实现此方法的最佳示例是
SecurableContentItemsAuthorizationEventHandler
,您可以在
Orchard.ContentPermissions
模块中找到它。

这回答了我关于将此类代码放置在何处的问题。但是,我现在的问题是,如果我的检查失败,我无法在
OnResultExecuting
方法中重定向,因为“在设置HTTP头之后无法重定向”。知道有没有办法解决这个问题吗?抱歉,这是我的错误,请查看更新的答案,在处理操作之前,应该使用“IActionFilter”而不是“IResultFilter”来捕获请求。干杯,我想知道的一切,还有更多!