Asp.netCore入门实例教程
- 格式:docx
- 大小:403.13 KB
- 文档页数:6
netcoreserver 例子当谈到.NET Core服务器时,通常是指使用.NET Core框架构建的Web服务器。
这种服务器可以用于托管Web应用程序、API和其他网络服务。
下面是一个简单的.NET Core服务器示例,基于 Core框架:csharp.using Microsoft.AspNetCore;using Microsoft.AspNetCore.Hosting;using Microsoft.AspNetCore.Builder;using Microsoft.AspNetCore.Http;using System;class Program.{。
static void Main()。
{。
var host = WebHost.CreateDefaultBuilder()。
.UseStartup<Startup>()。
.Build();host.Run();}。
}。
public class Startup.{。
public void Configure(IApplicationBuilder app)。
{。
app.Run(async (context) =>。
{。
await context.Response.WriteAsync("Hello, World!");});}。
}。
在这个示例中,我们创建了一个简单的.NET Core服务器。
当服务器启动时,它会监听传入的HTTP请求,并在收到请求时返回“Hello, World!”作为响应。
这只是一个非常基本的示例,实际上.NET Core服务器可以处理更复杂的逻辑,例如路由、中间件和数据库访问等。
另外,.NET Core还支持诸如Kestrel等不同的服务器选项,你可以根据自己的需求选择合适的服务器配置。
总的来说,.NET Core服务器提供了强大而灵活的工具来构建各种类型的Web应用程序和服务。
core简单部署之FTP配置(CentOS7.0安装配置Vsftp服务器)坑和结果1. 正确的跟着这个内容⾛,是靠谱的。
2. /etc/pam.d/vsftpd的⽂件头部加⼊以下信息(在后⾯加⼊⽆效)3.编辑⽂件需要注意,按键盘I是开始编辑,⽂件内容过长时,请注意使⽤⽅向键浏览。
编辑状态下退出需要先按ESC,然后输⼊:wq!,表⽰强制保存退出。
:q!表⽰强制退出不保存。
以下是配置过程⼀、配置防⽕墙,开启FTP服务器需要的端⼝CentOS 7.0默认使⽤的是firewall作为防⽕墙,这⾥改为iptables防⽕墙。
1、关闭firewall:systemctl stop firewalld.service #停⽌firewallsystemctl disable firewalld.service #禁⽌firewall开机启动2、安装iptables防⽕墙yum install iptables-services #安装vi /etc/sysconfig/iptables #编辑防⽕墙配置⽂件# Firewall configuration written by system-config-firewall# Manual customization of this file is not recommended.*filter:INPUT ACCEPT [0:0]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [0:0]-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT-A INPUT -p icmp -j ACCEPT-A INPUT -i lo -j ACCEPT-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT-A INPUT -m state --state NEW -m tcp -p tcp --dport 10060:10090 -j ACCEPT-A INPUT -j REJECT --reject-with icmp-host-prohibited-A FORWARD -j REJECT --reject-with icmp-host-prohibitedCOMMIT:wq! #保存退出systemctl restart iptables.service #最后重启防⽕墙使配置⽣效systemctl enable iptables.service #设置防⽕墙开机启动说明:21端⼝是ftp服务端⼝;10060到10090是Vsftpd被动模式需要的端⼝,可⾃定义⼀段⼤于1024的tcp端⼝。
CORE⼊门教程(附源码) CORE ⼊门教程第⼀课基本概念基本概念 Core Mvc是.NET Core平台下的⼀种Web应⽤开发框架符合Web应⽤特点.NET Core跨平台解决⽅案MVC设计模式的⼀种实现环境准备安装最新版安装最新版第⼆课控制器的介绍控制器定义⽅式:命名以Controller结尾使⽤ControllerAttribute标注public class TestController : Controller{}[Controller]public class Test : Controller{}默认路由规则域名/控制器类/⽅法{Domain}/{Controller}/{Action}数据形式QueryString: ?name=zhangsan&age=22FormCookieSessionHeaderHttpRequestHttpRequest 是⽤户请求对象提供获取请求数据的属性Cookies,Headers,Query,QueryString,Formpublic IActionResult Hello(){// Queryvar name = Request.Query["name"];// QueryStringvar query = Request.QueryString.Value;// Formvar username = Request.Form["username"];// Cookiesvar cookie = Request.Cookies["item"];// Headersvar headers = Request.Headers["salt"];return Content("Hello");}HttpContextHttpContext是⽤户请求上下⽂提供Session属性获取Session对象Session.Set 设置Session.Remove 移除Session.TryGetValue 获取数据public IActionResult Hello(){// byte[]HttpContext.Session.Set("byte", new byte[] { 1, 2, 3, 4, 5 });var bytes = HttpContext.Session.Get("byte");// stringHttpContext.Session.SetString("name", "tom");var name = HttpContext.Session.GetString("name");// intHttpContext.Session.SetInt32("id", 20);var id = HttpContext.Session.GetInt32("id");HttpContext.Session.Remove("name");HttpContext.Session.Clear();return Content("Hello");}数据绑定把⽤户请求的数据绑定到控制器⽅法的参数上⽀持简单类型与⾃定义类型绑定规则是请求数据名称与参数名称⼀致如查询字符串key名称跟参数⼀致Form表单名称跟参数⼀致public IActionResult Hello(RequestModel request,int? age){// 查询字符串var test = Request.Query["test"];// 简单类型var userAge = age;// ⾃定义类型var name = ;return Content("Hello");}public class RequestModel{public string Name { get; set; }}内容补充如果以Controller结尾的都是控制器,那如果程序⾥⾯由⼀些业务命名的时候也是以Controller结尾,怎么办?NonControllerAttribute/// <summary>/// 拍卖师控制类/// </summary>[NonController]public class AuctionController{}常⽤特性特性数据源FromHeaderAttribute请求头数据FromRouteAttribute路由数据FromBodyAttribute请求体FromFormAttribute表单数据FromQueryAttribute查询字符串FromServicesAttribute服务注册public IActionResult Say([FromForm]string name,[FromQuery]int age,[FromHeader] string salt,[FromBody] string content){return View();}特性参数通过特性修饰参数来影响绑定逻辑灵活扩展IActionResult动作结果接⼝具体实现JsonResult:返回JSON结构数据RedirectResult:跳转到新地址FileResult:返回⽂件ViewResult:返回视图内容ContentResult:⽂本内容第三课视图与表单数据传递ViewDataViewBagtempDataModelSessionCacheViewData ViewBag键值对动态类型索引器ViewData的封装⽀持任意类型动态属性TempData Cache Session视图级别应⽤程序级别会话级别只允许消费⼀次服务器端保存服务器端保存可多次赋值可设置有效期键值对形式键值对形式键值对形式Cache与.NET Framework时代不同,⼀种全新实现IMemoryCache接⼝依赖注⼊⽅式获取IMemoryCache.Get/Set操作数据[Controller]public class Test : Controller{private readonly IMemoryCache _cache;public Test(IMemoryCache memoryCache){this._cache = memoryCache;}public IActionResult ReadCache(){_cache.Set("name","tom");_cache.Get("name");_cache.Set("age",30);_cache.Get("age");User tom = new User(){ Name = "admin",Pwd = "123456"};_cache.Set<User>("user",tom);_cache.Get<User>("user");return Content("ok");}}public class User{public string Name { get; set; }public string Pwd { get; set; }}ViewStart以_ViewStart.cshtml命名,固定名称,不能更换⼀般放在视图所在⽬录的根⽬录下⾃动执⾏,⽆需⼿⼯调⽤不要再ViewStart中做⼤量的业务操作ViewImport以_ViewImport.cshtml命名,固定名称,不能更换只作引⼊操作⼀般放在视图所在⽬录的根⽬录下⾃动执⾏,⽆需⼿⼯调⽤视图中可以使⽤@using关键字引⼊所需命名空间通过ViewImport做全局性的命名空间引⼊,减少在每个页⾯中引⼊的⼯作量第四课数据验证数据验证特性ValidationAttributepublic abstract class ValidationAttribute : Attribute{/// <summary>Initializes a new instance of the <see cref="T:ponentModel.DataAnnotations.ValidationAttribute"></see> class.</summary>protected ValidationAttribute();/// <summary>Initializes a new instance of the <see cref="T:ponentModel.DataAnnotations.ValidationAttribute"></see> class by using the function that enables access to validation resources.</summary>/// <param name="errorMessageAccessor">The function that enables access to validation resources.</param>/// <exception cref="T:System.ArgumentNullException"><paramref name="errorMessageAccessor">errorMessageAccessor</paramref> is null.</exception>protected ValidationAttribute(Func<string> errorMessageAccessor);/// <summary>Initializes a new instance of the <see cref="T:ponentModel.DataAnnotations.ValidationAttribute"></see> class by using the error message to associate with a validation control.</summary>/// <param name="errorMessage">The error message to associate with a validation control.</param>protected ValidationAttribute(string errorMessage);/// <summary>Gets or sets an error message to associate with a validation control if validation fails.</summary>/// <returns>The error message that is associated with the validation control.</returns>public string ErrorMessage { get; set; }/// <summary>Gets or sets the error message resource name to use in order to look up the <see cref="P:ponentModel.DataAnnotations.ValidationAttribute.ErrorMessageResourceType"></see> property value if validation fails.</s /// <returns>The error message resource that is associated with a validation control.</returns>public string ErrorMessageResourceName { get; set; }/// <summary>Gets or sets the resource type to use for error-message lookup if validation fails.</summary>/// <returns>The type of error message that is associated with a validation control.</returns>public Type ErrorMessageResourceType { get; set; }/// <summary>Gets the localized validation error message.</summary>/// <returns>The localized validation error message.</returns>protected string ErrorMessageString { get; }/// <summary>Gets a value that indicates whether the attribute requires validation context.</summary>/// <returns>true if the attribute requires validation context; otherwise, false.</returns>public virtual bool RequiresValidationContext { get; }/// <summary>Applies formatting to an error message, based on the data field where the error occurred.</summary>/// <param name="name">The name to include in the formatted message.</param>/// <returns>An instance of the formatted error message.</returns>public virtual string FormatErrorMessage(string name);/// <summary>Checks whether the specified value is valid with respect to the current validation attribute.</summary>/// <param name="value">The value to validate.</param>/// <param name="validationContext">The context information about the validation operation.</param>/// <returns>An instance of the <see cref="ponentModel.DataAnnotations.ValidationResult"></see> class.</returns>public ValidationResult GetValidationResult(object value,ValidationContext validationContext);/// <summary>Determines whether the specified value of the object is valid.</summary>/// <param name="value">The value of the object to validate.</param>/// <returns>true if the specified value is valid; otherwise, false.</returns>public virtual bool IsValid(object value);/// <summary>Validates the specified value with respect to the current validation attribute.</summary>/// <param name="value">The value to validate.</param>/// <param name="validationContext">The context information about the validation operation.</param>/// <returns>An instance of the <see cref="ponentModel.DataAnnotations.ValidationResult"></see> class.</returns>protected virtual ValidationResult IsValid(object value,ValidationContext validationContext);/// <summary>Validates the specified object.</summary>/// <param name="value">The object to validate.</param>/// <param name="validationContext">The <see cref="T:ponentModel.DataAnnotations.ValidationContext"></see> object that describes the context where the validation checks are performed. This parameter cannot be null.</para /// <exception cref="T:ponentModel.DataAnnotations.ValidationException">Validation failed.</exception>public void Validate(object value, ValidationContext validationContext);/// <summary>Validates the specified object.</summary>/// <param name="value">The value of the object to validate.</param>/// <param name="name">The name to include in the error message.</param>/// <exception cref="T:ponentModel.DataAnnotations.ValidationException"><paramref name="value">value</paramref> is not valid.</exception>public void Validate(object value, string name);}常⽤数据验证RequiredAttributeRegularExpressionAttributeCompareAttributeRangeAttributeMaxAttributeMinAttributeStringLengthAttributeDataTypeAttribute服务器端使⽤使⽤包含验证规则的类接收数据使⽤ModelState.IsValid判断是否符合要求前端使⽤定义强类型视图并传递包含验证规则的业务数据模型使⽤HtmlHelper.ValidationFor初始前端验证规则使⽤HtmlHelper.ValidationMessageFor⽣成提⽰⽂字public class UserLogin{[Required(ErrorMessage = "⽤户名不能为空")][StringLength(10,ErrorMessage = "⽤户名长度不能超过10位")]public string UserName { get; set; }//[Required(ErrorMessage = "密码不能为空")][StringLength(6,ErrorMessage = "密码长度不能超过6位")]public string Password { get; set; }}public class FormController : Controller{public IActionResult Index(){return View(new UserLogin());}public IActionResult PostData(UserLogin login){return Content(ModelState.IsValid?"数据有效":"数据⽆效");}}@model erLogin@{Layout = null;}<!DOCTYPE html><html><head><meta name="viewport" content="width=device-width" /><title>Index</title><script src="~/lib/jquery/dist/jquery.min.js"></script><script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script><script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script> </head><body><form asp-action="PostData" method="post"><table><tr><td>⽤户名</td><td>@Html.TextBoxFor(m => erName)</td><td>@Html.ValidationMessageFor(m => erName)</td></tr><tr><td>密码</td><td>@Html.PasswordFor(m => m.Password)</td><td>@Html.ValidationMessageFor(m => m.Password)</td></tr><tr><td></td><td><input type="submit" value="登录" /></td><td></td></tr></table></form></body></html>第五课路由规则路由定义⽤户请求与控制器⽅法之前的映射关系路由配置IRouteBuilder通过MapRoute⽅法配置路由模板eMvc(routes =>{routes.MapRoute(name: "default",template: "{controller=Home}/{action=Index}/{id?}");routes.MapRoute(name: "admin_default",template: "admin/{controller=Home}/{action=Index}/{id?}");});RouteAttribute应⽤在控制器及⽅法上通过Template属性配置路由模板[Route("admin/form")]public class FormController : Controller{[Route("index")]public IActionResult Index(){return View(new UserLogin());}public IActionResult PostData(UserLogin login){return Content(ModelState.IsValid?"数据有效":"数据⽆效");}}路由约束对路由数据进⾏约束只有约束满⾜条件才能匹配成功约束⽰例说明required"Product/{ProductName:required}"参数必选alpha"Product/{ProductName:alpha}"匹配字母,⼤⼩写不限int"Product/{ProductId:int}"匹配int类型·········composite"Product/{ProductId:composite}"匹配composite类型length"Product/{ProductName:length(5)}"长度必须是5个字符约束⽰例说明length"Product/{ProductName:length(5)}"长度在5-10之间maxlength"Product/{ProductId:maxlength(10)}"最⼤长度为10minlength"Product/{ProductId:minlength(3)}"最⼩长度为3min"Product/{ProductId:min(3)}"⼤于等于3max"Product/{ProductId:max(10)}"⼩于等于10range"Product/{ProductId:range(5,10)}"对应的数组在5-10之间regex"Product/{ProductId:regex(^\d{4}$)}"符合指定的正则表达式路由数据路由数据也是请求数据的⼀部分路由数据与表单数据⼀样,也可以绑定到参数上默认是通过名称进⾏匹配,也可以通过FormRouteAttribute匹配参数与路由数据的映射关系public IActionResult Index([FromRoute] int? id){return View();}第六课应⽤发布与部署发布发布⽅法使⽤Visual Studio发布应⽤:项⽬右键 -> 发布 -> 发布⽅式选择...使⽤dotnet publish命令⾏⼯具发布:dotnet publish --configuration Release --runtime win7-x64 --output c:\svc 视图预编译少了运⾏时编译过程,启动速度快预编译后,整个程序包更⼩可以通过MvcRazorCompileOnPublish配置是否开启,默认是开启状态关闭视图预编译:打开项⽬的.csproj⽂件配置MvcRazorCompileOnPublish为false<Project Sdk=".Sdk.Web"><PropertyGroup><TargetFramework>netcoreapp2.1</TargetFramework><!-- 关闭视图预编译 --><MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish></PropertyGroup><ItemGroup><PackageReference Include="Microsoft.AspNetCore.App" /><PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.1.2" PrivateAssets="All" /><PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.1.1" /></ItemGroup></Project>部署IIS 部署⽬标机器安装对应版本的安装应⽤程序池的“.NET CLR版本”设置为“⽆托管代码”⾃宿主发布发布成⼀个exe直接运⾏不⽤依赖IISRuntimeIdentifier<!-- 依赖框架的部署 (FDD) --><PropertyGroup><TargetFramework>netcoreapp2.2</TargetFramework><RuntimeIdentifier>win7-x64</RuntimeIdentifier><SelfContained>false</SelfContained><IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled></PropertyGroup><!-- 独⽴部署 (SCD) --><PropertyGroup><TargetFramework>netcoreapp2.2</TargetFramework><RuntimeIdentifier>win7-x64</RuntimeIdentifier><IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled></PropertyGroup>.........源码地址喜欢的话,请Star⼀下哦。
asp 教程
ASP教程是一种用于创建动态网页的技术,它主要使用了VBScript或JScript作为服务器端脚本语言。
通过ASP,我们
可以在网页中嵌入脚本代码,用于处理用户的请求和生成动态内容。
ASP脚本通常以<%和%>标记包围,可以被服务器解释执行。
这样,我们可以在网页中实现一些动态的功能,比如读取数据库中的数据,生成个性化的内容,接收用户的输入并进行处理等等。
要开始使用ASP,首先我们需要在服务器上安装IIS(Internet Information Services)。
IIS是微软的Web服务器软件,它可
以通过HTTP协议接收用户的请求,并将请求交给ASP处理,再将处理结果返回给用户。
安装好IIS后,我们就可以创建ASP文件,扩展名为.asp。
在ASP文件中,我们可以使用多种服务器对象来处理请求,
比如Request对象用于获取用户提交的表单数据,Response对
象用于向客户端发送响应,Server对象用于处理服务器相关的
操作等等。
同时,ASP还提供了丰富的内置函数和对象,用
于实现各种功能。
除了基本的语法和对象,ASP还支持使用组件和数据库等来
实现更复杂的功能。
通过使用组件,我们可以重复使用一些常用的功能模块,提高代码的复用性和开发效率。
而通过数据库,我们可以将数据存储在服务器上,方便读写和管理。
总的来说,ASP是一种强大而灵活的技术,它可以帮助我们构建出功能丰富的动态网站。
通过学习ASP,我们可以掌握处理用户请求和生成动态内容的方法,为用户提供更好的网站体验。
使⽤VisualStudioCode开发CoreWebApi学习笔记(⼀)--起步本⽂记录了在Windows环境下安装Visual Studio Code开发⼯具、.Net Core 1.0 SDK和开发⼀个简单的Web-Demo⽹站的全过程。
⼀、安装Visual Studio Code安装⽂件下载地址:,当前最新版本是1.3。
推荐安装最新版,因为附带Debug插件,⽀持在vs code上进⾏断点调试。
⼆、安装.Net Core 1.0 SDK安装⽂件下载地址:三、创建⼀个.Net Core应⽤程序1. 打开cmd窗⼝,创建⼀个⽬录,作为⼯程⽬录2. 进⼊⽬录,使⽤下⾯三条命令初始化⼀个.Net Core应⽤程序并运⾏dotnet newdotnet restoredotnet run运⾏结果如下图。
当出现Hello World!时表⽰应⽤程序已经初始化成功。
四、使⽤Visual Studio Code编写⼀个简单的Web-Demo程序1. 使⽤VS Code打开上两步创建的⽂件夹2. 打开project.json⽂件,将内容修改为如下代码⽚段内容1 {2 "version": "1.0.0-*",3 "buildOptions": {4 "debugType": "portable",5 "emitEntryPoint": true6 },7 "dependencies": {8 "Core.App": {9 "type": "platform",10 "version": "1.0.0"11 },12 "Microsoft.AspNetCore.Server.Kestrel": "1.0.0"13 },14 "frameworks": {15 "netcoreapp1.0": {16 "imports": "dnxcore50"17 }18 }19 }3. 在cmd窗⼝执⾏ dotnet restore 命令更新nuget包4. 创建Startup.cs⽂件,编写以下内容1using Microsoft.AspNetCore.Builder;2using Microsoft.AspNetCore.Hosting;3using Microsoft.AspNetCore.Http;45namespace WebApiFrame6 {7public class Startup8 {9public void Configure(IApplicationBuilder app)10 {11 app.Run(context =>12 {13return context.Response.WriteAsync("Hello World!");14 });15 }16 }17 }5. 打开Program.cs⽂件,将内容修改为如下代码⽚段内容using Microsoft.AspNetCore.Hosting;namespace WebApiFrame{public class Program{public static void Main(string[] args){var host = new WebHostBuilder().UseKestrel().UseStartup<Startup>().Build();host.Run();}}}五、运⾏调试Web-Demo应⽤程序1. 切换到调试窗⼝,初始化调试配置⽂件初始化launch.json配置⽂件修改launch.json⽂件内容初次启动调试,需要配置任务运⾏程序,⽣成tasks.json配置⽂件六、启动调试再次启动调试,程序将正常运⾏,可以在调试控制台看到⽇志输出访问默认路径:http://localhost:5000,可以看到页⾯显⽰Hello World!到此,⼀个简单的Web-Demo应⽤程序完成了。
1.第一章,少废话上手干 1.新建.net core mvc项目从vs2019中新建项目 选 core web2.项目名称3.选择web应用程序mvc版本4.新建.net core mvc项目这些文件或者文件夹都是比较重要的。
启动文件是startup 是启动文件,appsetting.json 里面可以存放链接字符串。
5.开始增加EF的包。
这三个就是管理外置包的地方,第一个是控制台添加。
第二个是窗口版本的添加。
效果一样。
Microsoft.EntityFrameworkCore.SqlServerMicrosoft.EntityFrameworkCore.ToolsMicrosoft.EntityFrameworkCore.SqlServer.Design增加这样的三个包这样一个包就加载进去了。
6.创建实体类Models这步就不介绍了。
在sqlserver中直接执行就行。
建好表之后,在上面的5的最后一个菜单 第一个选项 控制台中执行下面的句子Scaffold-DbContext "Server=.;Database=VideoSms;UID=sa;PWD=123456" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Force -UseDatabaseNames在黑窗口中显示表示导入成功。
在Models的文件夹中就出现了你需要的文件。
注意 避坑:再次执行上面的命令报错的时候。
把项目重新编译一次就好了。
至此。
你的环境已经搭建完毕。
剩下的和普通的mvc开发就没什么区别了。
第二章 让你的项目好看点1.找个你喜欢的UI框架导入到项目中来里面用到的css js等等文件都可以放到这里。
Cshtml中调用的时候 用~/js/abc.js的方法就可以访问到了。
Core2读写InfluxDB时序数据库的⽅法教程前⾔在我们很多应⽤中会遇到有⼀种基于⼀系列时间的数据需要处理,通过时间的顺序可以将这些数据点连成线,再通过数据统计后可以做成多纬度的报表,也可通过机器学习来实现数据的预测告警。
⽽时序数据库就是⽤于存放管理这种有着时间顺序数据的,时序数据库⼀般都⽀持时序数据的快速写⼊、持久化、多纬度的聚合查询等基本功能。
InfluxDB简介InfluxDB是⼀个基于时间序列数据⽽开发的⾼性能数据存储平台,它可以对时序数据进⾏⾼吞吐量的摄取、压缩和实时查询。
InfluxDB是⽤Go语⾔编写的,它会编译成⼀个没有外部依赖的⼆进制⽂件来运⾏,⽀持Java、JavaScript、c#等语⾔。
InfluxDB⽀持类似SQL的查询语⾔,同时还⽀持正则表达式、算术表达式和时间序列特定函数以加速数据的处理效率。
如下是跟InfluxDB相关的⽹址:特点:⽆结构(⽆模式):可以是任意数量的列可以设置metric的保存时间⽀持与时间有关的相关函数(如min、max、sum、count、mean、median等),⽅便统计⽀持存储策略:可以⽤于数据的删改。
(influxDB没有提供数据的删除与修改⽅法)⽀持连续查询:是数据库中⾃动定时启动的⼀组语句,和存储策略搭配可以降低InfluxDB的系统占⽤量。
原⽣的HTTP⽀持,内置HTTP API⽀持类似sql语法⽀持设置数据在集群中的副本数⽀持定期采样数据,写⼊另外的measurement,⽅便分粒度存储数据。
⾃带web管理界⾯,⽅便使⽤(登⼊⽅式:http://:8083)InfluxDB操作这⾥将会简单的介绍下如何操作InfluxDB,通过这些操作基本也能满⾜⼯作上的需要了。
操作InfluxDB可以通过命令⾏⼯具,也可借助开源的客户端⼯具,我这⾥使⽤的是⼀款名叫“InfluxDBStudio”基于C#编写的开源⼯具。
常⽤操作的代码如下:#显⽰⽤户show users#创建⽤户create user "username" with password 'password'#创建管理员权限⽤户create user "username" with password 'password' with all privileges#删除⽤户drop user "username"#创建数据库create database "db_name"#显⽰所有的数据库show databases#删除数据库drop database "db_name"#使⽤数据库use db_name#显⽰该数据库中所有的表show measurements#创建表,直接在插⼊数据的时候指定表名,其中test为表名insert test,host=127.0.0.1,monitor_name=test count=1#删除表drop measurement "measurement_name"#查询数据select * from test order by time desc#查看当前数据库的数据保存策略(Retention Policies)show retention policies on "db_name"#创建新的数据保存策略#rp_name:策略名#db_name:具体的数据库名;#3w:保存3周,3周之前的数据将被删除,influxdb具有各种事件参数,⽐如:h(⼩时),d(天),w(星期)#replication 1:副本个数,⼀般为1就可以了#default:设置为默认策略create retention policy "rp_name" on "db_name" duration 3w replication 1 default#修改数据保存策略alter retention policy "rp_name" on "db_name" duration 30d default#删除数据保存策略drop retention policy "rp_name"#查看数据库的连续查询(Continous Queries)show continuous queries#创建新的连续查询(Continous Queries)#cq_name:连续查询名字#db_name:数据库名字#sum(count):计算总和#table_name:当前表名#new_table_name:存新的数据的表名#30m:时间间隔为30分钟create continous query cq_name on db_name begin select sum(count) into new_table_name from table_name group by time(30m) end#删除连续查询drop continous query cp_name on db_name实现通过上述的介绍与操作我们已基本熟悉了InfluxDB数据库,那么接下来咱们就⼀起来看看在 Core2程序中如何来读写操作InfluxDB数据库吧。
Core中IdentityServer4实战之Claim详解⼀、前⾔由于疫情原因,让我开始了以博客的⽅式来学习和分享技术(持续分享的过程也是⾃⼰学习成长的过程),同时也让更多的初学者学习到相关知识,如果我的⽂章中有分析不到位的地⽅,还请⼤家多多指教;以后我会持续更新我的⽂章,望⼤家多多⽀持和关注。
上⼏篇⽂章主要分享了IdentityServer4在 Core 3.x 中的应⽤,在上⾯的⼏篇分享中有⼀部分博友问了我这么⼀个问题"他通过IdentityServer4 来搭建授权中⼼⽹关服务,怎么才能在访问受保护的Api资源中获取到⽤户的相关的⾝份信息呢?"。
那这篇⽂章主要来分享认证过程中的⼀个重要组成部分Claim,在开始之前强烈建议还没看过我写的 IdentityServer4 系列⽂章的同学先看⼀下,下⾯⼏篇⽂章中以架构思维带⼤家进⼊IdentityServer4 的世界⼆、Claim 是什么ClaimClaim我的理解是⼀个声明,存储着⼀个键值对的关系,就相当于⾝份证中的姓名:特朗普 , 性别:男等等⾝份证的系列元素,每⼀个项都是⼀个键值,我们看看Claim主要代码public class Claim{public string ClaimType { get; set; }public string ClaimValue { get; set; }}代码中主要核⼼两个属性ClaimType和ClaimValue;ClaimType 就是Key,ClaimValue就代表⼀个Value。
这样的话,刚好可以存储⼀个键值对。
这时候姓名:特朗普是不是就可以存进去了。
同时微软也提供了默认的ClaimType,部分默认的如下图:Claim差不多已经介绍完毕,相对⽐较简单清晰,Claim可以说是⾝份的最⼩单元的声明(⾝份单元)。
ClaimsIdentity我们先来看看ClaimsIdentity的部分代码,代码如下:public class ClaimsIdentity:IIdentity{public ClaimsIdentity(IEnumerable<Claim> claims){}//名字这么重要,当然不能让别⼈随便改啊,所以我不许 set,除了我⼉⼦跟我姓,所以是 virtual 的public virtual string Name { get; }public string Label { get; set; }//⾝份单元集合public virtual IEnumerable<Claim> Claims { get; }//这是我的证件类型,也很重要,同样不许 setpublic virtual string AuthenticationType { get; }public virtual void AddClaim(Claim claim);public virtual void RemoveClaim(Claim claim);public virtual void FindClaim(Claim claim);}从代码中可以看到有⼀个Claims 属性,是⼀个集合,看到这⾥是不是可以把我们的⾝份证给联想进去呢?我们每个⼈都有⼀个“⾝份证”(ClaimIdentity),⾝份证中包含了多个“⾝份单元”(Claim)等信息。
Core使⽤SignalR进⾏服务间调⽤⽅法⽰例⽹上查询过很多关于 core使⽤SignalR的简单例⼦,但是⼤部分都是简易聊天功能,今天⼼⾎来潮就搞了个使⽤SignalR进⾏服务间调⽤的简单DEMO。
⾄于SignalR是什么我就不多说了,微软官⽅⽂档也不少。
第⼀步新建项⽬所有VS开发第⼀步都是新建⼀个解决⽅案哈,这⾥我就不多介绍如何新建项⽬啦~~开发环境,VS2017,.NET CORE 2.1新建两个 core项⽬如此简单的操作⼤家都懂的注⼊SignalR在被调⽤的服务端的Startup.cs中注⼊SignalR 在 core2.1中已经默认包含了SignalR的库,直接在ConfigureServices⽅法中添加如下代码:services.AddSignalR().AddMessagePackProtocol()AddMessagePackProtocol()表⽰启⽤ MessagePack ⽀持在服务器上新建⼀个继承Hub类的类public class ServerHub : Hub{}⾥⾯可以实现需要被客户端执⾏的⽅法。
配置Hub连接URL在Startup.cs的Configure添加下⾯代码eSignalR(routes =>{routes.MapHub<ServerHub>("/myserver");});添加服务新建⼀个Services⽂件夹,添加我们的服务接⼝和接⼝实现类。
public interface IMyService{Task<string> SayHello();Task Sleep();}public class MyService : IMyService{public async Task<string> SayHello(){return await Task.Factory.StartNew(() => "Hello");}public async Task Sleep(){await Task.Delay(3000);}}在Startup.cs中的ConfigureServices⽅法中进⾏依赖注⼊,注意需要在AddSignalR()之前注⼊。
1.第一章,少废话上手干1.新建.net core mvc项目
从vs2019中新建项目选 core web
2.项目名称
3.选择web应用程序mvc版本
4.新建.net core mvc项目
这些文件或者文件夹都是比较重要的。
启动文件是startup 是启动文件,appsetting.json 里面可以存放链接字符串。
5.开始增加EF的包。
这三个就是管理外置包的地方,第一个是控制台添加。
第二个是窗口版本的添加。
效果一样。
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Tools
Microsoft.EntityFrameworkCore.SqlServer.Design
增加这样的三个包
这样一个包就加载进去了。
6.创建实体类Models
这步就不介绍了。
在sqlserver中直接执行就行。
建好表之后,在上面的5的最后一个菜单第一个选项控制台中执行下面的句子
Scaffold-DbContext "Server=.;Database=VideoSms;UID=sa;PWD=123456" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Force -UseDatabaseNames
在黑窗口中显示
表示导入成功。
在Models的文件夹中就出现了你需要的文件。
注意避坑:再次执行上面的命令报错的时候。
把项目重新编译一次就好了。
至此。
你的环境已经搭建完毕。
剩下的和普通的mvc开发就没什么区别了。
第二章让你的项目好看点
1.找个你喜欢的UI框架导入到项目中来
里面用到的css js等等文件都可以放到这里。
Cshtml中调用的时候用~/js/abc.js的方法就可以访问到了。