zoukankan      html  css  js  c++  java
  • ASP.NET Core 五: MVC(控制器,模型,视图),过滤器,实现身份验证授权与多数据库上下文的使用

    概念说明:

    重点:控制器(路由,默认控制器,使用POCO基类和控制器,返回值),视图(模型与数据模型传递,Layout视图布局,部分视图,视图组件,视图中使用依赖注入,标记辅助程序(HTMLHelper,标记辅助程序),表单验证),动作过滤器,身份验证和授权(默认身份验证和授权,自定义身份验证授权)

    视图,Layout布局可以设置公共的布局,但是如果当前的页面不需要默认的默认的视图布局,可以设置指定目标视图布局或者为空布局(@{ Layout=null })。

    视图Section,如果在当前视图中,不希望所有内容都显示在同一个RendereBody中,而是希望显示在视图布局的其地方,则使用Section指定。

    部分视图可以指定局部显示,尤其对于一些很多页面都会显示的部分。部分视图有两种显示方式,一种是直接显示具体的页面,一种是从控制器中返回部分视图(这里相当于再次调用控制器方法,这可以用于类似Ajax的功能,比如点击按钮,访问页面进行局部刷新)。视图组件,和部分视图的第二种方式类似,或者说这是MVC的另一种构建,不过这里系统不再使用控制器,而是对视图组件专门的文件夹结构,官方文档或者相关书籍有具体的操作说明。

    HtmlHelper和标记辅助程序都有各自的优势以及类似的部分,并不是相互替代的关系,不过有时候为了在开发中方面清晰,个人比较偏向只使用标记辅助程序,标记辅助程序都是可以扩展的,可以编写自己的标记。

    过滤器,也叫筛选器,这里的过滤器可以说是中间件的一种特殊应用,不过这里就不纠结具体细节,跟着官方的文档用就行了。过滤器有有多种(操作过滤器,结果过滤器,资源过滤器)

    身份验证和授权,官方的提供身份验证框架有一个专门的数据库上下文,叫做IdentityDbContext,这个上下文也是继承自DbContext。可以让应用数据也使用这个上下文。当然为了使得应用降低耦合性,本人倾向于将两个上下文分开。

    过滤器:

    和中间件类似,如果把中间件看作是主管道,那么可以认为过滤器是专门针对mvc的次级管道。过滤器是用特性的方式注解在需要的控制器或者控制器的方法上,从而对相应的部分进行过滤处理。

    MVC框架提供了多种过滤器基类,比如结果过滤器,行为过滤器,等。可以通过过滤器进行中断操作,结果后处理等。具体可查阅官方文档。

    下面的例子,使用结果过滤器,给返回的内容上加上附加的内容字符串(HelloWorld)。

        public class ShortCircuitingFilterAttribute : Attribute, IActionFilter
        {
            public void OnActionExecuted(ActionExecutedContext context)
            {
                context.Result = new ContentResult()
                {
                    Content = context.Result + "-----HelloWorld"//在结果上添加附加的内容
                };
            }
    
            public void OnActionExecuting(ActionExecutingContext context)
            {
                
            }
        }
    public class HomeController : Controller
        {
            private readonly ILogger<HomeController> _logger;
    
            [ShortCircuitingFilter]//添加上过滤器特性
            public IActionResult SomeResource()
            {
                return Content("Successful access to resource - header is set.");
            }
    
            //Other Actions etc
        }

    身份认证:

    重要的几个概念:声明,身份,凭据,策略,授权

    声明(Claim)相当于标签,声明通常为字符串,当然也可以自定义声明的类型。

    身份(ClaimsIdentity)拥有多个声明,

    凭据由多个身份组成。

    策略(Policy)是在startup配置,比如某个策略,需要访问者即凭据,拥有某个角色,拥有哪些声明等,当授权单独指定某个策略时,那这个凭据就必须满足这个策略的所有条件才能访问这个资源。

    授权(Authrization),用于标识一个资源特性,可以决定访问这个资源的凭据需要有哪些声明,角色,或者策略。只有这个凭据满足这个授权指定的所有条件才能访问这个资源。

    Identiy的使用,除了官方文档,这里推荐教程:ASP.NET Core 3 - Authentication & Authorization -身份验证与授权(Youtube搬运)_哔哩哔哩_bilibili转自(https://www.youtube.com/watch?v=Fhfvbl_KbWo&list=PLOeFnOV9YBa7dnrjpOG6lMpcyd7Wn7E8V&index=1)

    关于Oauth,如果是第三方或者其他应用想要访问授权资源,那么这个应用就要先有授权,而这个授权的凭据就是Token,比如用户登录,登录成功之后返回这个凭据,在浏览器的通常凭据保存就是Cookie。这整个过程的协议就是Oauth,当然如果不想用这个标准,而想使用自己的设定,不怕风险也行。官方专门为Asp.net core编写的满足的Oauth和OpenID的框架就是IdentitySever4,由于本人暂时用不着,所以这里不学。

  • 相关阅读:
    mysql数据库基本类型
    常用辅助类【转】
    Java 并发笔记】并发机制底层实现整理[转发]
    关于PROPAGATION_NESTED的理解
    线程数设置
    c# Expression 扩展[转]
    Net定时器 【转载】
    【转】高可用设计-58沈剑
    【转】委托的三种调用示例(同步调用 异步调用 异步回调)
    [coursera OA] acme match
  • 原文地址:https://www.cnblogs.com/xiaoahui/p/15385731.html
Copyright © 2011-2022 走看看