Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASP.NET中放置身份验证检查的位置_C#_Asp.net_Aop - Fatal编程技术网

C# 在ASP.NET中放置身份验证检查的位置

C# 在ASP.NET中放置身份验证检查的位置,c#,asp.net,aop,C#,Asp.net,Aop,我有一些用于确定用户是否登录的代码,我想将其放在ASP.NET网站的每个页面上,以便只有登录的用户才能查看它。问题是站点被分成多个项目/解决方案,因此维护单个代码可能很困难 我想我可以创建一个类来继承System.Web.UI.Page并重写Page\u Init,但这需要更改所有页面,以便它们从新类继承。此外,我认为这不会在项目之间起作用 于是我想从另一个角度来解决这个问题:使用AOP。我以前从未使用过Aspect,但看起来我可以使用PostSharp编写一个Aspect,在每个页面_Init

我有一些用于确定用户是否登录的代码,我想将其放在ASP.NET网站的每个页面上,以便只有登录的用户才能查看它。问题是站点被分成多个项目/解决方案,因此维护单个代码可能很困难

我想我可以创建一个类来继承
System.Web.UI.Page
并重写
Page\u Init
,但这需要更改所有页面,以便它们从新类继承。此外,我认为这不会在项目之间起作用

于是我想从另一个角度来解决这个问题:使用AOP。我以前从未使用过Aspect,但看起来我可以使用PostSharp编写一个Aspect,在每个
页面_Init
(或者
页面_Load
?)之前注入代码。这可能是一个快速的解决方案,但如果我需要一个页面来不执行身份验证检查(每个人都可以使用),我可能会遇到问题


只是澄清一下,我已经有了一个登录解决方案;我只是想在每个页面上检查登录名。

查看HttpModules。asp.net框架已经过编程,因此每个页面请求上都会运行一个模块,您只需编写该模块并将其添加到web.config即可

编辑:这里有一个更好的链接,演示如何处理BeginRequest事件

< p> > @ jRunMeLead,其中有一个很好的选择,但是如果您正在创建自定义登录SOLIN,请检查它有一个非常简单的登录实现步骤

< p> Windows身份基础可以为您解决这个问题。有关WIF的详细信息,请参阅。不需要重新发明轮子。如果您只有一个Web应用程序,那么表单身份验证就足够了

既然您似乎已经处理好了登录解决方案,并且可以正常工作,那么创建一个覆盖page_init的类听起来是您最好的选择。这可以跨其他项目工作,只需在单独的项目中创建该类,即可将其包含在其他解决方案中。。。老实说,这是跨多个项目跨越逻辑的最简单方法。。这也将很容易维护,因为您只需在以后更新一个位置


如果您使用的是母版页,您不必点击所有页面,只需将其包含在特定母版页上,并设置所有要验证的页面即可使用该母版页。

为什么不使用?这一切都是由ASP.NET为您完成的。通常,ASP.NET页面应该构建在母版页上,其中集中了公共代码,包括登录检查。您可以创建两个母版页,一个检查母版页,另一个不检查母版页。@jrummell这不够灵活。在现实生活的项目中,当选择可定制项目时,不能选择MembershipProvider。是吗?@PankajGarg不,成员资格是一个灵活的框架。如果内置的提供者不能满足您的需求,您可以实现自己的提供者。成员资格非常灵活。。。检查CodeFirstMembershipProvider;)不,系统将足够灵活,可以在代码隐藏中编写相同的代码,而不是显式地提到web.config中的角色。您不需要在web.config中指定角色,只需注册模块即可。身份验证模块的工作完全由您决定,web.config只是说“为每个页面请求运行此模块”