asp.net mvc 中怎么像webform一样自定义一个BaseController实现判断用户是不是登录 然后获取用户的权限

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp.net mvc 中怎么像webform一样自定义一个BaseController实现判断用户是不是登录 然后获取用户的权限相关的知识,希望对你有一定的参考价值。

写一个过滤器,在需要做身份验证的action上加上过滤器就可以了

        [CheckUserFilter]
        public ActionResult DelItem(int? id, FormCollection form)
        
            bool result = false;
            if (id != null)
            
                int _id = id ?? 0;
                result = new DbHelper().DelSysUserInfo(_id);
                if (result)
                
                    return Redirect(Request.UrlReferrer.AbsoluteUri);
                
            
            var ids = form["users"].Split(',');
            result = new DbHelper().DelSysUserInfo(ids);
            return Redirect(Request.UrlReferrer.AbsoluteUri);
        

 public class CheckUserFilter : ActionFilterAttribute
    
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        
            base.OnActionExecuting(filterContext);
            if (filterContext.HttpContext.Session["currentUser"] != null)
            
                return;
            
            else if (CookieManage.GetCookie("login") != null)
                .......相关操作

参考技术A 没必要非用Controller,你只要写一个公共类,
在这个类中重写OnActionExecuting方法,
然后再每个页面加载的action前加上[类名]就行了,
效果就是每次执行这个action之前就走一遍这个方法。

ASP.NET Core - 像 MVC 一样的脚手架标识

【中文标题】ASP.NET Core - 像 MVC 一样的脚手架标识【英文标题】:ASP.NET Core - Scaffold Identity like MVC 【发布时间】:2019-04-21 09:58:13 【问题描述】:

我创建了一个带有个人用户帐户身份验证的 Web 应用程序 MVC 项目。

之后我创建了一个自定义 UserIdentity。我正在尝试更改 Identity 的默认“注册”视图,添加我的新字段,但是我只设法将新页面搭建为 Razor 页面。

我的问题是:是否可以在 MVC 之类的结构中构建这些新视图?我根本不想将 MVC 与 Razor Pages 混合使用。

如果这不可能,有没有办法创建一个覆盖默认行为的控制器(例如身份/帐户/注册)?

【问题讨论】:

“我不想将 MVC 与 Razor Pages 混合使用”- 为什么不呢?他们不冲突。事实上,Razor Pages (建立在 MVC 之上)。 【参考方案1】:

对于任何想在 MVC 上“搭建”身份的人,我推荐以下方法:

去官方身份ASP.net Github Repository (https://github.com/aspnet/Identity) 下载。打开解决方案并搜索 IdentitySample.Mvc 项目。将必要的文件复制到您的项目中。

重要提示:不要忘记更改添加文件的命名空间,因为它们属于不同的项目。

【讨论】:

【参考方案2】:

不,这是不可能的。 Identity 团队决定将默认 UI 切换到 Razor Pages,现在就是这样。如果你愿意,你可以手动创建控制器和视图,从脚手架的 Razor 页面中引用代码来在 MVC 中创建相同的东西,但这取决于你。没有自动的方法可以这样做。

【讨论】:

这正是我现在正在做的事情,正如 PM 所说,如果我们到处都有 MVC,洋葱架构,“它会混淆其他开发人员”,突然间所有的身份信息都在 Razor 页面中,所有逻辑也在那里。我明白他的观点是公平的,它只是看起来和感觉“凌乱” 我以前对 Razor Pages 有不好的看法,但他们已经在我身上长大了。它们的使用场景非常有限,但在那种场景中它们无法被击败:基本上是简单的 CRUD,并且大部分是带有数据的静态页面。它们是完全独立的,因此非常容易理解。需要更改 Foo 编辑页面中的某些内容?转到 FooEdit Razor 页面。完毕。我最初尝试将标识重新设计为 MVC 结构,但后来意识到 Razor Page 版本更易于使用和维护。 项目的其余部分遵循一些严格的设计模式,Identity 或任何其他基于 Razor 的部分“脱颖而出”,这不会打扰您吗?我真的很好奇,因为我非常疯狂地试图遵循某种模式,而微软对此投入了一把扳手:) 我的核心项目根本不应该依赖 ASP,但它现在必须依赖于 ApplicationUser 必须扩展 IdentityUser 和因此需要依赖。我应该不关心并继续吗? 有很多东西可以打开。老实说,我想说 MVC 模式几乎要消失了。移动部件太多,坦率地说,微软一开始就做得不好。大多数网站都可以完全使用 Razor Pages 构建。从技术上讲,API 端点仍然是 MVC,但在这个等式中并没有真正的 V。对于更高级的应用程序要求,Razor 组件/Blazor 是门票。或者像 Angular 这样的传统客户端框架。无论如何,没有 MVC。老实说,对于纯 MVC 样式设置,我想不出一个好的用例。

以上是关于asp.net mvc 中怎么像webform一样自定义一个BaseController实现判断用户是不是登录 然后获取用户的权限的主要内容,如果未能解决你的问题,请参考以下文章

Asp.net webform 控件是不是具有像 Winforms 控件一样的最高功能?

Hello Blazor:像ASP.NET WebForm一样写代码

求asp.net webform 工作的流程

Asp.net中WebForm 与 MVC的架构区别

浅析ASP.NET Webform和ASP.NET MVC

将 ASP.Net MVC 与 WebForms 相结合