从零开始一个个人博客 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");
});
}
}
}
文章是原创 转载请注明出处
从零开始一个个人博客 by asp.net core and angular(二)的更多相关文章
- 从零开始一个个人博客 by asp.net core and angular(一)
这是一个个人叙述自己建设博客的帖子,既然是第一篇那肯定是不牵扯代码了,主要讲一下大体的东西,微软最新的web框架应该就数asp.net core 3.1了这是一个长期支持版,而且是跨平台又开源版本,所 ...
- 从零开始一个个人博客 by asp.net core and angular(三)
这是第三篇了,第一篇只是介绍,第二篇介绍了api项目的运行和启动,如果api项目没什么问题了,调试都正常了,那基本上就没什么事了,由于这一篇是讲前端项目的,所以需要运行angular项目了,由于前端项 ...
- 基于 Hexo 从零开始搭建个人博客(二)
阅读本篇前,请先配置好相应的环境,请仔细阅读教程 基于 Hexo 从零开始搭建个人博客(一). 原文链接:基于 Hexo 从零开始搭建个人博客(二) 前言 博客搭建过程遇到任何问题,优先在本页面搜索, ...
- 基于 Hexo 从零开始搭建个人博客(五)
阅读本篇前,请先阅读前几篇文章: 基于 Hexo 从零开始搭建个人博客(一) 基于 Hexo 从零开始搭建个人博客(二) 基于 Hexo 从零开始搭建个人博客(三) 基于 Hexo 从零开始搭建个人博 ...
- 前端设计师也有必要学习seo,推荐一个seo博客
做前端设计师有一段时间了,现在越来越觉得作为一个前端设计师,必须要懂一些seo的知识. 因为公司的seo们,总是在网站做好以后,提出各种各样的网站修改的需求. 如果前端设计师,能够了解一些基本的seo ...
- 如何搭建一个独立博客——简明Github Pages与Hexo教程
摘要:这是一篇很详尽的独立博客搭建教程,里面介绍了域名注册.DNS设置.github和Hexo设置等过程,这是我写得最长的一篇教程.我想将我搭建独立博客的过程在一篇文章中尽可能详细地写出来,希望能给后 ...
- 这几天有django和python做了一个多用户博客系统(可选择模板)
这几天有django和python做了一个多用户博客系统(可选择模板) 没完成,先分享下 断断续续2周时间吧,用django做了一个多用户博客系统,现在还没有做完,做分享下,以后等完善了再慢慢说 做的 ...
- 使用前端技术和MySQL+PHP制作自己的一个个人博客网站
源代码地址:https://github.com/YauCheun/BlogCode 我的博客网站地址:http://www.yublog.fun/ 制作前景: 想拥有一个自己独自开发的一个小型博客网 ...
- 怎么在阿里云搭建一个WordPress博客(超详细教程)
想以正确的方式启动一个 WordPress 博客吗?我知道,这可能是一个令人恐惧的想法 -- 其实你并不孤单.但是,在帮助很多用户创建博客之后,我决定编写一份详细的指南,让任何没有技术知识的人都能拥有 ...
随机推荐
- C#数字图像处理(十四)击中击不中变换 (Hit-miss)
击中击不中变换定义 击中击不中变换(HMT)需要两个结构元素B1和B2,合成一个结构元素对B=(B1,B2) 一个用于探测图像内部,作为击中部分;另一个用于探测图像外部,作为击不中部分.显然,B1和B ...
- c#数字图像处理(七)直方图匹配
直方图匹配,又称直方图规定化,即变换原图的直方图为规定的某种形式的直方图,从而使两幅图像具有类似的色调和反差.直方图匹配属于非线性点运算. 直方图规定化的原理:对两个直方图都做均衡化,变成相同的归一化 ...
- JS基础——ATM机终端程序编写(2.0)
在1.0版本上,利用数组进行用户的创建,通过调用数组下标,进行密码.余额的使用.新增了切换账户.修改密码的功能 以下为数组版代码. 创建模拟账户 个账户: let user = ["xiao ...
- js---描述链表
js描述链表 有些情况下js的数组结构在实际使用中速度很慢,此时可以考虑用链表来代替它: //链表类 function Node(element){ this.element=element; thi ...
- 根据范围爬TMS规则瓦片
因为需要简单写了一个下载地图的爬虫,代码如下: #coding=utf-8 import urllib.request import os import socket import zlib impo ...
- 冬日曙光——回溯CNN的诞生
前言 卷积神经网络(CNN)作为深度学习的重要一支,在当前计算机视觉领域应用相当广泛.本文回顾了深度学习的发展历程,讲述CNN基本的理论概念和第一代卷积神经网络LeNet-5的建立.文章言有不当之处, ...
- ts和nts的区别 (redis中碰到)
[TS指Thread Safet y线程安全 NTS即None-Thread Safe 非线程安全] 区别:[TS NTS] TS指Thread Safety,即线程安全,一般在IIS以ISAPI ...
- 虚拟机 ubuntu系统忘记密码如何进入
重启 虚拟机 按住shift键 会出现下面的界面 按住‘e’进入下面的界面往下翻 更改红框勾到的字符串为: rw init=/bin/bash 然后按F10进行引导 然后输入 :”passwd” ...
- 给定区间[-2的31次方, 2的31次方]内的3个整数A、B和C,请判断A+B是否大于C
题目描述给定区间[-2的31次方, 2的31次方]内的3个整数A.B和C,请判断A+B是否大于C. 输入描述:输入第1行给出正整数T(<=10),是测试用例的个数.随后给出T组测试用例,每组占一 ...
- DOCKER 学习笔记7 Docker Machine 在阿里云实例化ECS 以及本地Windows 实例化虚拟机实战
前言 通过以上6小节的学习,已经可以使用DOCKER 熟练的部署应用程序了.大家都可以发现使用 DOCKER 带来的方便之处,因为现在的话,只是在一台服务器上部署,这样部署,我们只需要一条命令,需要的 ...