ASP.NET Core

第十八节:Asp.Net Core WebApi基础总结和请求方式

蹲街弑〆低调 提交于 2020-08-14 06:44:53
一. 基础总结 1.Restful服务改造   Core下的WebApi默认也是Restful格式服务,即通过请求方式(Get,post,put,delete)来区分请求哪个方法,请求的URL中不需要写方法名。 但是我们不喜欢这种方式,所以我们将默认的路由规则 [Route("api/[controller]")] 改为: [Route("api/[controller]/[action]")] 2.基本格式 继承 ControllerBase 类,需要加特性[ApiController]. (1) 特性[ApiController]的作用:   a.特性路由要求,和[Route]成对出现,有了它,通过 UseMvc 定义的传统路由或通过 Startup.Configure 中的 UseMvcWithDefaultRoute 访问操作均无效。   b.模型验证错误自动触发 HTTP 400 响应   c.绑定源参数推理(如果没有 [ApiController] 属性,同时也没有 [FromQuery][FromBody]等 的绑定源属性,ASP.NET Core 运行时会尝试使用复杂对象模型绑定器。)   d.Multipart/form-data 请求推理   f.错误状态代码的问题详细信息 (2) 特性[ApiController]的作用位置:   a

【无私分享:ASP.NET CORE 项目实战(第八章)】读取配置文件(二) 读取自定义配置文件

醉酒当歌 提交于 2020-08-14 06:01:29
原文: 【无私分享:ASP.NET CORE 项目实战(第八章)】读取配置文件(二) 读取自定义配置文件 目录索引   【无私分享:ASP.NET CORE 项目实战】目录索引 简介   我们在 读取配置文件(一) appsettings.json 中介绍了,如何读取appsettings.json.   但随之产生了问题:我们使用的是在 Startup.cs 中(如下图)来实现配置读取,有两个问题 ① 我们如果定义N种配置,是否要再这里添加N条这样的配置 ; ② 如果我们的配置不想写在appsettings.json中呢       解决问题   带着上面的两个问题,我们首先来添加一个配置文件 siteconfig.json      {     "SiteBaseConfig": {       //文件上传路径       "FileUpPath": "/upload/",       //是否启用单用户登录       "IsSingleLogin": "True",       //允许上传的文件格式       "AttachExtension": "gif,jpg,jpeg,png,bmp,rar,zip,doc,docx,xls,xlsx,ppt,pptx,txt,flv,apk,mp4,mpg,ts,mpeg,mp3,bak,pdf",       /

ASP.NET Core Blazor WebAssembly 之 .NET JavaScript互调

空扰寡人 提交于 2020-08-14 04:10:27
Blazor WebAssembly可以在浏览器上跑C#代码,但是很多时候显然还是需要跟JavaScript打交道。比如操作dom,当然跟angular、vue一样不提倡直接操作dom;比如浏览器的后退导航。反之JavaScript也有可能需要调用C#代码来实现一些功能,毕竟客户的需求是千变万化的,有的时候只能通过一些hack的手段来实现。 .NET调用JavaScript函数 使用JSRuntime.InvokeVoidAsync调用无返回值的JavaScript函数 显然我们的.NET类库里不会有JavaScript内置的alert方法来显示提示,这里演示下如何调用JavaScript的alert方法: <h3>.net call javascript</h3> <button @onclick="CallJs"> Call alert </button> @inject IJSRuntime jsRuntime @code { private void CallJs() { jsRuntime.InvokeVoidAsync("alert", "this message from .net runtime ."); } } 使用JSRuntime.InvokeVoidAsync调用具有返回值的JavaScript函数 我们在JavaScript环境定义一个加法函数然后

C# 数据操作系列

南楼画角 提交于 2020-08-14 04:07:14
0. 前言 继上一篇,以及上上篇,我们对SqlSugar有了一个大概的认识,但是这并不完美,因为那些都是理论知识,无法描述我们工程开发中实际情况。而这一篇,将带领小伙伴们一起试着写一个能在工程中使用的模板类。 1. 创建一个Client SqlSugar在操作的时候需要一个Client,用来管理数据库连接,并操作数据库。所以我们写一个DbContext用来创建Client: public class DefaultContext { public SqlSugarClient Client { get; } public DefaultContext(string connectionString, DbType dbType) { Client = new SqlSugarClient(new ConnectionConfig { ConnectionString = connectionString,//"Data Source=./demo.db", DbType = dbType, IsAutoCloseConnection = true, InitKeyType = InitKeyType.Attribute }); Client.CodeFirst.InitTables(typeof(Dept), typeof(Person), typeof(Employee));

【无私分享:ASP.NET CORE 项目实战(第十四章)】图形验证码的实现

放肆的年华 提交于 2020-08-14 03:54:40
原文: 【无私分享:ASP.NET CORE 项目实战(第十四章)】图形验证码的实现 目录索引   【无私分享:ASP.NET CORE 项目实战】目录索引 简介      很长时间没有来更新博客了,一是,最近有些忙,二是,Core也是一直在摸索中,其实已经完成了一个框架了,并且正在准备在生产环境中试用,但是很多东西也是出于自己理解的肤浅和技术的不断更新,经常变动,所以,如果自己还没有完全搞好,就来写博客,反复的修正,可能会误导一些新手朋友。   如果有正在研究Core的朋友,可以大家一起交流下。 验证码         相信很多朋友跟我一样,图形验证码成为了 Core 的一个绊脚石。   System.Drawing.Primitives 这是官方的一个Drawing库,但是没有Bitmap、Graphics等很多东西,所以这个做图形验证码基本Pass了。   CoreCompat.System.Drawing 这个是一个第三方的, 使用了mono的System.Drawing实现,只要安装了之前使用System.Drawing的代码完全不用修改,也支持描画验证码等描画类的功能。 如果需要linux或osx支持,可以安装runtime.linux.CoreCompat.System.Drawing和runtime.osx.10.10-x64.CoreCompat.System

dotnet 通过 dotnetCampus.YamlToCsharp 将 YAML 多语言文件构建为代码

こ雲淡風輕ζ 提交于 2020-08-14 02:51:10
我在团队内的几乎所有 dotnet 项目,包括 UWP 和 WPF 桌面端以及 Xamarin 移动端和 ASP.NET Core 后端等需要用到多语言的项目,我的多语言都是通过 YAML 写的,这样相对来说在项目比较小的时候维护方便。但是 YAML 写的文件要读取需要用到 YAML 解析等,这部分的解析速度不够快,于是我就写了一个工具,用于在软件构建的时候自动将 YAML 多语言文件构建为代码。这样不仅能提升软件的执行速度,还能减少软件发布时需要带出去 YAML 解析库 用 YAML 做多语言有什么好处?其实在项目用的语言项不多的时候可读性还是很好的,维护起来也很清真 但是用 YAML 作为输出的缺点是需要在软件运行的时候解析这个 YAML 多语言文件,而解析 YAML 多语言文件需要 YAML 解析库,但是实际上我可以在软件构建的时候将 YAML 文件转换为 C# 代码,这样我就可以在软件运行的时候不需要解析这个 YAML 文件,提升我软件的运行速度 在客户端的应用,很多时候在软件运行第一个界面就需要用到多语言,而启动的时候文件读写最多的。如果此时还需要读取 YAML 文件,那么对软件启动速度还是很伤的。而刚好 dotnet 的一项技术就是 Roslyn 预编译技术,虽然本文用到的技术和 Roslyn 没有什么关系。但是可以在软件构建的时候将 YAML 转 C#

【asp.net core 系列】4. 更高更强的路由

北慕城南 提交于 2020-08-14 02:42:47
0. 前言 在之前我们介绍了请求通过路由寻找到控制器,以及控制器与视图的数据流转。那么,我们回过头来,再看看路由的一些其他用法。 1. 路由属性(Route Attribute) 按照英文的直接翻译,Routing Attribute 的意思是路由属性,但实际上 Attribute在微软的官方称呼是特性。嗯,所以个人觉得Route Attribute应该是特性路由,路由特性。 嗯,暂且甩开称呼的问题,小伙伴们知道这是一种使用Attribute标记的路由配置方案就行。我们之前了解的路由设置都是通过路由表设置的,而Route Attribute则是另外一种方案。 1.1 如何设置 这种方案主要是通过RouteAttribute类来设置的,我们先来看一下这个类是个什么样的吧: [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)] public class RouteAttribute : Attribute, IRouteTemplateProvider { public RouteAttribute(string template); public string Name { get; set; } public int

.Net Core 中GC的工作原理

*爱你&永不变心* 提交于 2020-08-13 19:18:02
前言 .NET 中GC管理你服务的内存分配和释放,GC是运行公共语言运行时(CLR Common Language Runtime)中,GC可以帮助开发人员有效的分配内存和和释放内存,大多数情况下是不需要去担心的,但是有时候服务总是是出现莫名的问题,所以还是有必要了解一下GC的基础知识的。这里就不介绍内存方面的知识了。 GC回收过程 GC 将对象分为大对象和小对象,如果对象的大小大于或者等于 85000byte 将被视为大对象,大对象会被分配到到 (LOH) Large Object Heap 中去。 GC 有一个代数的概念 Generation ,分为三代 Generation 0 : 0代,这里面都是生命周期很短的对象,比如临时变量,当你new一个对象的时候该对象都会在 Generation 0 中,这里的对象将很快的被GC回收,但是当你new的是一个大对象的时候它会直接进去大对象堆(LOH) Generation 1 : 1代,这一代包含的也基本是生命周期很短的对象。它是短期对象和长期对象之间的缓冲区。 Generation 2 : 2代,这一代包含的都是生命周期长的对象,它们都是从1代和2代中选拔出来的, LOH 属于2代。 当分配的对象使用的内存超出了 GC 的阈值时回收就会开始。阈值是随着服务的运行 GC 自己调整的。或者直接调用 GC.Collect

Asp.Net Core 之 @Html.Action 迁移

﹥>﹥吖頭↗ 提交于 2020-08-13 18:36:12
原文: Asp.Net Core 之 @Html.Action 迁移 想必只要 接触了 net core的小伙伴们 已经发现 @html.Action()方法 官方已经不提供支持了,转而使用 ViewComponents 替代了,同时也增加了TagHelper。但是 如果想用以前的@Html.Action()方法,我们其实可以自己动手去实现它。 下面就开始 实现之旅吧! 1、创建 静态类 HtmlHelperViewExtensions,其命名空间为 Microsoft.AspNetCore.Mvc.Rendering。这样我们直接用@Html直接可以 使用Action方法了。 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 using Microsoft

使用 xUnit 编写 ASP.NET Core 单元测试

五迷三道 提交于 2020-08-13 18:21:46
还记得 .NET Framework 的 ASP.NET WebForm 吗?那个年代如果要在 Web 层做单元测试简直就是灾难啊。.NET Core 吸取教训,在设计上考虑到了可测试性,就连 ASP.NET Core 这种 Web 或 API 应用要做单元测试也是很方便的。其中面向接口和依赖注入在这方面起到了非常重要的作用。 本文就来手把手教你如何用 xUnit 对 ASP.NET Core 应用做单元测试。.NET Core 常用的测试工具还有 NUnit 和 MSTest,我本人习惯用 xUnit 作为测试工具,所以本文用的是 xUnit。 创建示例项目 先用 ASP.NET Core API 模板建一个应用。 模板为我们自动创建了一个 ValuesController,为了方便演示,我们只留其中一个 Get 方法: public class ValuesController : ControllerBase { // GET api/values/5 [HttpGet( "{id}" )] public ActionResult< string > Get ( int id) { return "value" ; } } 然后再添加一个 xUnit 单元测试项目: 模板自动为我们添加好了 xUnit 引用: < ItemGroup > < PackageReference