zoukankan      html  css  js  c++  java
  • 留言薄的写法

    asp.net core2.1+EFCore + MVC开发留言管理项目实战(二)

     

      承接上篇,这里主要介绍如何实现cookie验证登录以及简单的BaseRepository编写。废话不多说,下面进入主题。

      一、cookie验证登录

      1、startup的ConfigurationServices方法加上如下代码:

      同样startup的Configure方法加上如下代码:

      2、继承AuthorizeAttribute标签并实现IAuthorizationFilter接口,代码如下:

    复制代码
    using Microsoft.AspNetCore.Authentication;
    using Microsoft.AspNetCore.Authentication.Cookies;
    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.AspNetCore.Mvc.Abstractions;
    using Microsoft.AspNetCore.Mvc.Filters;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace Ye.BoardMessage.WebApp.Models
    {
        /// <summary>
        /// 跳过检查属性
        /// </summary>
        [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
        public sealed class SkipUserAuthorizeAttribute : Attribute, IFilterMetadata
        {
        }
    
        [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
        public class UserAuthorizeAttribute : AuthorizeAttribute, IAuthorizationFilter
        {
            public UserAuthorizeAttribute()
            {
                this.AuthenticationSchemes = CookieAuthenticationDefaults.AuthenticationScheme;
            }
            public virtual void OnAuthorization(AuthorizationFilterContext filterContext)
            {
                var authenticate = filterContext.HttpContext.AuthenticateAsync(CookieAuthenticationDefaults.AuthenticationScheme);
                if (authenticate.Result.Succeeded || this.SkipUserAuthorize(filterContext.ActionDescriptor))
                {
                    return;
                }
                HttpRequest httpRequest = filterContext.HttpContext.Request;
                string url = "/Account/Login";
                url = string.Concat(url, "?returnUrl=", httpRequest.Path);
                RedirectResult redirectResult = new RedirectResult(url);
                filterContext.Result = redirectResult;
                return;
            }
    
            protected virtual bool SkipUserAuthorize(ActionDescriptor actionDescriptor)
            {
                bool skipAuthorize = actionDescriptor.FilterDescriptors.Where(a => a.Filter is SkipUserAuthorizeAttribute).Any();
                if (skipAuthorize)
                {
                    return true;
                }
                return false;
            }
        }
    }
    复制代码

      3、验证,代码如下:

     View Code

      4、退出,代码如下:

    复制代码
    [Models.UserAuthorize]
            [HttpGet]
            public async Task<IActionResult> Logout()
            {
                await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
                return LocalRedirect("/Account/Login");
            }
    复制代码

       说明:以上代码的实现参考了  《这个大神的博客》

      二、BaseRepository实现

      封装了基本的增删改查方法,可以与其他仓储共用。此外,有个比较大的缺陷,没有实现事务方面的UnitOfWork,对这个感兴趣的看官可以自行实现,亦可以参考ABP的EF实现,这里有部分代码也是参考ABP的实现的。好了,废话不多说,上代码:

      接口:

     View Code

      实现:

     View Code

      三、总结

      EFCore的使用与EntityFramework并无多大区别;asp.net core 安全方面集成的东西很多,光是官方文档就占据了上十个篇幅来介绍,在这方面还需要下苦工来研究,可谓 ”路漫漫其修远兮“ 。这里稍微提下,前端模板是使用开源的前端模板《SB-admin》,一款bootstrap风格的模板。下面上几个图片看看效果。

      1、登录

      2、首页

      

      3、列表页面

        

      至此,这个系列已经基本完毕,下篇将简单介绍下如何安装以及使用(网上参考资料太多,本人主要是整理下本人觉得有用的博文)。

     
  • 相关阅读:
    理解Angular中的$apply()以及$digest()
    google书签找回
    地址
    c# mvc 封装返回对象
    C#设计模式总结
    EntityFramework.Extended 对EF进行扩展
    C#进阶系列——WebApi 路由机制剖析:你准备好了吗?
    C#进阶系列——WebApi 跨域问题解决方案:CORS
    VS插件File Nesting
    c# implicit explicit关键字(隐式和显式数据类型转换)
  • 原文地址:https://www.cnblogs.com/qiu18359243869/p/14457716.html
Copyright © 2011-2022 走看看