从零开始一个个人博客 by asp.net core and angular(二)

上一篇帖子讲了用了哪些技术,这个帖子就先介绍介绍api项目吧,项目就是一个普通的webapi项目,账户系统用的identity ,什么是identity呢? 其实就是官方封装好的一系列的可以用来操作数据库的类,对用户信息进行增删改查。主要牵扯的类有如下几个:

UserManager

SignInManager

RoleManager

上面列出的是我项目牵扯的大家有兴趣的可以去官方接口文档那里看看api

namespace Microsoft.AspNetCore.Identity这个是命名空间

具体的看下面的项目结构图

大家可以把我项目给克隆下来 然后打开看看具体的配置

api项目地址GitHub链接

这个account控制器里面写好了创建用户的一些方法主要就是用了 UserManager 和SignInManager进行用户的创建和用户的登录

请你跟我这样做 项目刚克隆下来是运行不起来的,因为数据使用的是PostgreSql所以首先安装PostgreSql下面是linux下的安装 如果你是本地window调试,所以再找个window版的安装教程吧 我就不细讲了

Windows上PostgreSQL安装配置教程

下面是安装后要做的一些操作请结合帖子进行操作 不懂的请网络找找

实在不实行就留言吧 下图是安装后的文件目录 里面有很多的指令 下面的指令也在里面

初始化命令

.\initdb.exe -D ..\data?-E UTF-8 --locale=chs -U postgres -W

启动数据库

.\pg_ctl.exe -D ..\data start

注册服务 注册完就能开机自启了

.\pg_ctl.exe register -N PostgreSQL -D ../data

CentOS7下PostgreSQL 11的安装和配置教程

到时候可以用图上的软件连接测试下免费的而且用起来很不错:

配置好数据库密码测试完成就照着我图上的操作点击管理用户机密会弹出一个json文件名字是secrets你把自己的本地测试环境的连接字符串就放到这个里面具体使用办法请看下面的帖子,此法是为了测试项目时泄露机密到github 这样操作时可以将github上的数据暴露不会泄露到时候只需修改secrets.json不需要修改appsetting.json了:

安全存储中 ASP.NET Core 中开发的应用程序机密

数据库如果调通了就可以运行项目了 由于大家都是新的数据库 数据库里对应的表都不存在所以需要进行数据库的更新 我这个项目主要有两个数据上下文如图到时候在DataAccess项目里执行如下指令

Update-Database -Context BlogSysContext

Update-Database -Context AppIdentityDbContext

数据上下文如图到时候在DataAccess项目里执行如下指令

我因为数据库已经更新到最新了 所以提示我已经更新了 大家可以自行试试 等到数据库表都更新好了 就可以启动项目了,项目依赖的东西都在配置文件里,大家记得好好看看。

为什么用postgreSql是因为这个orm连接的东西更新的比较快 应该时微软有官方的人参加维护 特别适合个人和一些使用免费数据库的人使用

Npgsql.EntityFrameworkCore.PostgreSQL这个是安装的连接器 大家到时候留意下

保险起见 我还是把最重要的配置代码贴出来 git项目也有

using System;
using System.Collections.Generic;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using GreenShade.Blog.Api.Filters;
using GreenShade.Blog.Api.Hubs;
using GreenShade.Blog.Api.Services;
using GreenShade.Blog.DataAccess.Data;
using GreenShade.Blog.DataAccess.Services;
using GreenShade.Blog.Domain.Models;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpOverrides;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.IdentityModel.Tokens;

namespace GreenShade.Blog.Api
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<ForwardedHeadersOptions>(options =>
            {
                options.KnownProxies.Add(IPAddress.Parse("10.0.0.100"));
            });
            services.AddDbContext<AppIdentityDbContext>(options =>
            options.UseNpgsql(Configuration.GetConnectionString("OffLineNpgSqlCon")));
            services.AddDbContext<BlogSysContext>(options =>
            options.UseNpgsql(Configuration.GetConnectionString("OffLineNpgSqlCon")));
            services.AddIdentity<ApplicationUser, IdentityRole>()
                .AddEntityFrameworkStores<AppIdentityDbContext>();
            services.AddSignalR();
            services.Configure<JwtSeetings>(Configuration.GetSection("JwtSeetings"));
            services.Configure<QQLoginSetting>(Configuration.GetSection("qqlogin"));
            services.Configure<Dictionary<string, WnsSetting>>(Configuration.GetSection("wns"));
            services.AddHttpClient<ThirdLoginService>();
            services.AddScoped<ArticleService>();
            services.AddScoped<BlogManageService>();
            services.AddHttpClient<WallpaperService>();
            services.AddHttpClient<PushWnsService>();
            //services.AddScoped<ThirdLoginService>();
            var jwtSeetings = new JwtSeetings();
            //绑定jwtSeetings
            Configuration.Bind("JwtSeetings", jwtSeetings);
            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;

            })
            .AddJwtBearer(options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidIssuer = jwtSeetings.Issuer,
                    ValidAudience = jwtSeetings.Audience,
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSeetings.SecretKey))
                };
                options.Events = new JwtBearerEvents
                {
                    OnMessageReceived = context =>
                    {
                        var accessToken = context.Request.Query["access_token"];

                        if (!string.IsNullOrEmpty(accessToken) &&
                            (context.HttpContext.WebSockets.IsWebSocketRequest || context.Request.Headers["Accept"] == "text/event-stream"))
                        {
                            context.Token = context.Request.Query["access_token"];
                        }
                        return Task.CompletedTask;
                    }
                };
            });
            services.AddCors(options =>
            {
                options.AddPolicy("any", builder =>
                {
                    builder.AllowAnyOrigin() //允许任何来源的主机访问
                    .AllowAnyMethod()
                    .AllowAnyHeader()
                    .WithOrigins("http://192.168.1.109:4200", "http://localhost:4200", "http://192.168.1.103:4200",
                    "http://192.168.1.103:4200", "http://192.168.16.67:4200", "http://192.168.16.138:4200", "https://www.douwp.club")
                    .AllowCredentials()//指定处理cookie
                    .SetPreflightMaxAge(TimeSpan.FromSeconds(60));
                });
            });
            services.AddControllers(options =>
            {
                options.Filters.Add(new ExceptionHandleAttribute());//根据实例注入过滤器
            });
            //services.AddControllers();
        }
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            app.UseForwardedHeaders(new ForwardedHeadersOptions
            {
                ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
            });

            app.UseCors("any");
            app.UseWebSockets();
            app.UseRouting();
            app.UseAuthentication();
            app.UseAuthorization();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
                endpoints.MapHub<ChatHub>("/chathub");
            });
        }
    }
}

文章是原创 转载请注明出处

原文地址:https://www.cnblogs.com/GreenShade/p/12234637.html

时间: 2024-11-04 15:21:46

从零开始一个个人博客 by asp.net core and angular(二)的相关文章

从零开始一个个人博客 by asp.net core and angular(一)

这是一个个人叙述自己建设博客的帖子,既然是第一篇那肯定是不牵扯代码了,主要讲一下大体的东西,微软最新的web框架应该就数asp.net core 3.1了这是一个长期支持版,而且是跨平台又开源版本,所以大家可以去GitHub上找源码,也可以研究源码是怎么写的. 大过年的偏偏出现这个疫情,所以只能窝屋里搞着玩了. 我的博客项目主要是用了 asp.net core 和angular 然后部署到centos上用nginx进行了反向代理,具体的什么是nginx和angular这如果不懂的哥们自行网络搜索

自己开发博客(ASP.NET MVC+EF CodeFrist)-历程小功能

自己开发博客(ASP.NET MVC+EF CodeFrist)-时间轴小功能 想写个类似时间轴的效果 就找了一个插件 前端不济 找了一个简单的插件地址http://sc.chinaz.com/jiaoben/130509308250.htm 这是实体类 public class TimnAxis : BaseEntity<int> { [Required(ErrorMessage = "{0}是必须的")] [Display(Name = "时间")]

HTML+JS 写一个 个人博客

HTML+JS 写一个 个人博客(初学版) HTML+JS 写一个 个人博客(初学版) 自己琢磨了两三天,算是把HTML入门了吧,然后就想着用这点知识写一个个人主页,然后一下午的时间写完了. 先不看代码,说说思路: 第一步:就是构思,一个网页的展示怎么才好看?!!站在一个老男人的角度,那远远是不能的,,, 1.标题 2.菜单栏(加个超链接) 3.展示页面(图片轮播) 第二步:小标题展示页面. 第三步:代码实现.(说了一堆废话)  代码 Jscript实现图片轮播.(很简单,一看就懂) <scri

ASP.NET CORE系列【二】使用Entity Framework Core进行增删改查

原文:ASP.NET CORE系列[二]使用Entity Framework Core进行增删改查 介绍 EntityFrameworkCore EF core 是一个轻量级的,可扩展的EF的跨平台版本.对于EF而言 EF core 包含许多提升和新特性,同时 EF core 是一个全新的代码库,并不如 EF6 那么成熟和稳定.EF core 保持了和EF相似的开发体验,大多数顶级API都被保留了下来,所以,如果你用过EF6,那么上手EF core你会觉得非常轻松和熟悉,EF core 构建在一

一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统

原文地址: http://www.cnblogs.com/daxnet/p/6139317.html 2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客.当然,我写博客也不是从2008年才开始的,在更早时候,也在CSDN和系统分析员协会(之后名为“希赛网”)个人空间发布过一些与编程和开发相关的文章.从入行到现在,我至始至终乐于与网友分享自己的所学所得,希望会有更多的同我一样的业内朋友能够在事业上取得成功,也算是为我们的软件事业贡献自己的一份力量吧,这也是我在博客园建博客

从零开始构建一个的asp.net Core 项目(二)

接着上一篇博客继续进行.上一篇博客只是显示了简单的MVC视图页,这篇博客接着进行,连接上数据库,进行简单的CRUD. 首先我在Controllers文件夹点击右键,添加->控制器 弹出的对话框中选择miniual Dependencies.在项目的根目录下添加一个Models文件夹,在该文件夹下添加一个Users.cs类.(该类在数据库中对应一张表,表名为Users 里边有三个字段 其中ID是主键,自增的.) public class Users { [Key] public int Id {

从零开始,搭建博客系统MVC5+EF6搭建框架(5),博客详情页、留言、轮播图管理、右侧统计博文

一.博客系统进度回顾 上一遍博客介绍到,系统已经实现到了发布以及前台布局展示,接下来就是实现一些,详情页,留言.轮播图管理.右侧博文统计信息实现. 二.博客系统详情页实现 2.1先来看看详情页展示的效果 2.2实现控制器在前台控制器中创建一个Blog的控制器,主要是展示博客分类以及详情页 Action详情页实现: 1 /// <summary> 2 /// 详情页 3 /// </summary> 4 /// <param name="id"><

从零开始,搭建博客系统MVC5+EF6搭建框架(4)上,前后台页面布局页面实现,介绍使用的UI框架以及JS组件

一.博客系统进度回顾以及页面设计 1.1页面设计说明 紧接前面基础基本完成了框架搭建,现在开始设计页面,前台页面设计我是模仿我博客园的风格来设计的,后台是常规的左右布局风格. 1.2前台页面风格 主页面: 技术博客风格: 详情页风格: 详情页留言风格: 1.3后台风格: 表格风格: 博客发布风格: 以上看到的系统页面是目前系统完成的风格,以后页面设计都参考这些页面风格. 二.使用前端web框架以及插件说明 2.1选择前端web框架,我找了很多框架,以前学过自学过bootstrap觉得对于没有前端

搭建一个java博客

买了个阿里云ECS服务器好久了.最近心血来潮,还是买了个域名尝试搭建个自己的玩具.还是先由博客开始~ 域名备案是个麻烦的地方.不过用阿里云还好,只要上传资料就好了,比我想象中好一点,起码不用特意跑到某个地方拍照...有空再记录怎么通过域名好了. 因为本人是写java的,所以找了个开源博客.see:http://b3log.org/    源码:https://github.com/emmerichLuang/solo.git. 第一步就是从github中fork下来,自己先跑通过.以后爱咋改就咋