c#
文章平均质量分 69
YuanlongWang
全栈开发工程师,热爱研究新技术,专注于数据研究领域,乐于分享
展开
-
测试 ASP.NET Core 中间件
正常情况下,中间件会在主程序入口统一进行实例化,这样如果想单独测试某一个中间件就很不方便,为了能测试单个中间件,可以使用单独测试。原创 2024-01-16 18:25:48 · 610 阅读 · 0 评论 -
.Net Core 使用 AspNetCoreRateLimit 实现限流
上一篇文章介绍过使用.NET 7 自带的中间件可以实现简单的Api限流,但是这个.NET 7以后才集成的中间件,如果你使用的是早期版本的.NET,可以使用第三方库AspNetCoreRateLimit实现Api限流。AspNetCoreRateLimit 是一种 ASP.NET Core 速率限制解决方案,旨在根据 IP 地址或客户端 ID 控制客户端可以向 Web API 或 MVC 应用发出的请求速率。原创 2024-01-16 15:55:36 · 1812 阅读 · 0 评论 -
ASP.NET Core 的 Web Api 实现限流 中间件
中间件提供速率限制中间件。类提供下列用于限制速率的扩展方法:。原创 2024-01-16 11:16:20 · 1513 阅读 · 0 评论 -
asp.net core项目发布到 iis上
我们都知道与传统asp.net 项目比较,ASP.NET Core则完全不同,它并不是运行在IIS的工作进程中,而是独立运行的。它运行于控制台应用程序之中,控制台中则运行了Kestrel Web服务器组件。Kestrel作为一款.NET Web服务器的实现,它在吞吐量性能方面做了很多工作。它可以快速将来自网络的请求接入到应用程序中,但是它仅仅是一个最基本的Web服务器。它没有类似IIS的Web管理服务,也没有IIS那么多的功能。原创 2024-01-12 18:21:19 · 718 阅读 · 0 评论 -
.NET core 中的Kestrel 服务器
什么是Kestrel?Kestrel 是一个跨平台的Web服务器,会默认在ASP.NET Core 项目模板中对其进行配置。未使用 IIS 托管时,ASP.NET Core 项目模板默认使用 Kestrel。在下面的模板生成的Program.cs中,方法在内部调用。原创 2024-01-12 11:40:46 · 2659 阅读 · 0 评论 -
.NET 反射的介绍和简单应用
反射还支持的更高级的行为,能在运行时动态创建新类型,并且对这些新类型的操作进行调用。发现信息(如名称、事件处理程序的数据类型、自定义特性、声明类型以及事件的反射的类型),并添加或删除事件处理程序。来定义和加载程序集,加载程序集清单中列出的模块,以及在此程序集中定位一个类型并创建一个它的实例。发现信息(如名称、数据类型、声明类型,反射的类型和属性的只读或可写状态),并获取或设置属性值。发现信息,如参数的名称、数据类型、参数是输入参数还是输出参数以及参数在方法签名中的位置。发现信息,如名称、访问修饰符(如。原创 2024-01-11 17:26:33 · 1179 阅读 · 0 评论 -
swagger Actions require an explicit HttpMethod binding for Swagger/OpenAPI 3.0报错处理
相关的Attribute。正常逻辑来说那就给每个Action添加HttpMethod呗,但是往往情况就出现在不正常的时候。因为项目是迁移的老项目,先不说私自改了别人代码带来的甩锅问题,公司的WebApi项目很多,这意味着Action很多,如果一个项目一个项目的去找Action添加HttpMethod可是一个不小的工作量,而且开发人员工作繁忙,基本上不会抽出来时间去修改这些的,因为这种只是Swagger不行,,否则就报这一大堆错误。这里的HttpMethod其实就是咱们常用。原创 2024-01-04 16:59:39 · 756 阅读 · 0 评论 -
.Net Core webapi RestFul 统一接口数据返回格式
json对象中data是返回的实际结果对象,可以是一个对象、一个list、一个字符串、一个数字......分别实现类带有泛型的 ApiResponse 类和 ApiResponse 类。的隐式转换,所以就完美解决这个问题,大大减少了代码量。注意在泛型类中,使用运算符重载,实现了。中,我们定义了一个运算符重载,实现了。但是整体的json格式要以上面的为准。2、使用过滤器(Filter)实现。类型呀,这不是类型不一致吗?1、自定义一个统一返回类。但这接口的返回值明明是。创建对应的接口和实现类。原创 2023-12-21 14:02:59 · 2291 阅读 · 1 评论 -
.NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
但是这存在一个问题,不是所有接口会按照定义的数据格式返回,除非每个接口都返回我们自定义的类,这种实现起来不太现实。我们需要不管接口定义的返回类型是什么,最后的结果都是统一的数据格式,需要实现这个功能就需要自定义一个过滤器来实现。附上 ApiResponse.cs IApiResponse.cs 代码。之前写过使用自定义返回类的方式来统一接口数据返回格式,时,把这个响应结果拿出来,再判断是不是。类型来确定这个返回结果是否包装过。没包装的话就给包装一下,就这么简单。在代码中进行判断,当响应的类型是。原创 2023-12-21 15:41:09 · 1403 阅读 · 1 评论 -
Asp.Net Core 项目中常见中间件调用顺序
常用的 AspNetCore 项目中间件有这些,调用顺序如下图所示:原创 2023-12-21 09:53:19 · 1014 阅读 · 0 评论 -
.Net Attribute 什么是特性、预定义特性使用(一)
特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号([ ])来描述的。特性(Attribute)用于添加元数据,如编译器指令和注释、描述、方法、类等其他信息。在.Net 框架提供了两种类型的特性预定义特性和自定义特性。在.net框架内提供了三种预定义特性,经常使用特性或对特性有了解的朋友肯定见到过或用过。obsolete预定义特性。原创 2023-12-19 17:55:42 · 916 阅读 · 0 评论 -
.NET core JWT身份认证实现
首先我们知道jwt中一定会有的字段有Issuer,Audience,另外jwt有过期时间,所以要有代表生命周期的Lifetime,表示续期的RenewalTime,然后是头字段,是否验证失效时间,是否验证签名等,于是就有了如下结构. JwtConfig.cs在Hero.Jwt中定义一个叫做JwtConfig的类,表示针对jwt的所有配置信息,ciset;set;/// 签名keyset;/// 生命周期set;/// 续期时间set;/// 是否验证生命周期set;/// 验证头字段set;原创 2023-12-15 18:30:02 · 1352 阅读 · 0 评论 -
.NET Core中鉴权 Authentication Authorization
Authentication:鉴定身份信息,例如用户有没有登录,用户基本信息Authorization:判定用户有没有权限使用框架提供的Cookie鉴权方式1.首先在服务容器注入鉴权服务和Cookie服务支持2.注册鉴权和授权中间件,用于在管道中调用拦截校验鉴权和授权3.在控制器引入特性 [Authorize] ,调用登录接口时使用HttpContext.SignInAsync()写入鉴权信息原创 2023-12-18 16:48:16 · 800 阅读 · 0 评论 -
用一个简单的例子教你如何 自定义ASP.NET Core 中间件(一)
中间件是一种装配到应用管道以处理请求和响应的软件。 每个组件:选择是否将请求传递到管道中的下一个组件。可在管道中的下一个组件前后执行工作。请求委托用于生成请求管道。 请求委托处理每个HTTP请求。一句话总结:中间件是比筛选器更底层,更上游的面向切面技术,其性能最高,可处理的应用范围远比过滤器广,如实现网关,URL转发,限流等等。原创 2023-12-18 15:42:21 · 406 阅读 · 0 评论 -
用一个简单的例子教你如何 自定义ASP.NET Core 中间件(二)
如果没有实现 InvokeAsync 方法运行会报错:“找不到'Hero.Jwt.MyMyMiddleware'类型的中间件的公共'Invoke'或'InvokeAsync'方法。上一章已经说过了,中间件是一种装配到应用管道以处理请求和响应的软件。新建一个静态类:MyMiddlewareExtensions。公共方法,参数必须保持一致,它是中间件执行的入口。新建一个类:MyMiddleware。必须要在构造函数里面申明请求委托。自定义中间件必须要实现。原创 2023-12-18 15:39:32 · 391 阅读 · 0 评论 -
使用Docker发布C# .NETCore WebApi容器至服务器
运行容器:docker run -d -p 8888:5050 --name wenapi lwpoor/mywebapi。完成后可以看到自己的docker hub 存储库地址,点击 发布,发布的时候必须要先运行本地 docker,不然会报错。选择 docker hub 将应用程序作为docker映像发布到docker hub。如果没有勾选或者使用VS019创建的项目,可以在项目右键 添加 docker支持。接下来开始发布程序,右键点击项目 发布。原创 2022-11-17 16:48:15 · 6661 阅读 · 2 评论 -
C# 零基础搭建一个简单的Asp.Net Core WebAip服务
下面介绍的vs2022 基于.NET 6 搭建的一个简单的Asp.Net Core WebAip启动vs2022,在开始页面选择“创建新项目(N)”。选择从C#的asp.net core WbeApi 作为一个初始的WebApi模板。[Route("api/[controller]/[action]")] 表示自定义api的地址:/api/控制器名称/j接口名称 ,以当前控制器为例:api/Admin/Login?pwd=111[HttpGet]表示请求以Get方式进行原创 2022-11-16 15:41:23 · 8326 阅读 · 3 评论 -
.NET 发展历程
.NET Framework是由微软开发,一个致力于敏捷软件开发(Agile software development)、快速应用开发(Rapid application development)、平台无关性和网络透明化的软件开发平台。.NET是微软为下一个十年对服务器和桌面软件工程迈出的第一步。.NET包含许多有助于Internet和Intranet 应用迅捷开发的技术。转载 2022-09-26 13:40:46 · 1384 阅读 · 0 评论 -
c# 使用wkhtmltopdf 把html页面转换成PDF存在本地
把html页面转成pdf有很多方法,这里介绍一种使用wkhtmltopdf 运用程序来转换,亲自测试,还好用首先需要先下载wkhtmltopdf 下载地址:下载后安装在指定位置代码很简单,但需要注意的是wkhtmltopdf 只能识别css样式,一些css3的样式识别不了,所以又可以转出来后样式没加载出来,排班就乱了还有一点是 url 地址 和pdf存储的地址不能太长,不然会转换失败,,,通过c#代码调用程序,代码如下: string path ...原创 2021-01-13 16:52:47 · 1345 阅读 · 0 评论 -
c# 发送邮箱方法整理,25端口和465端口
之前项目需要,做了一个发送邮箱的需求,做一下记录:开始的时候写了一个使用25端口发送邮件的方法,在本地测试了没有问题,发布到阿里云服务器上就不行了,原来是阿里云禁用了25端口,只能换用465端口来发送邮件,两种方法都写在下面了1、首先是使用25端口的方法,此方法要引用System.Net.Mail /// <summary> /// 发送邮件 /// </summary> /// <param na..原创 2021-01-13 16:33:17 · 2078 阅读 · 0 评论 -
使用WebSocket搭建一个智能聊天系统
大家都知道WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。自从html5支持websocket以后,开始被大家用来实时通讯。下面分享一个使用websocket搭建的智能聊天系统:智能聊天系统二维码,系统使用了地位,可使用手机端查看:后台是使用C#开发的,下面给大家分享一下代码:一...原创 2018-09-30 12:07:35 · 2095 阅读 · 0 评论 -
C# 使用Timer设置一个定时任务
好久没更新博客了,这次记录一个最近写的定时任务,使用的是.NET4.0自带的一个System.Timers执行定时任务,话不多说,先上代码。1、在Global.asax文件的Application_Start方法里面加入如下代码: //定义定时器 //1000表示1秒的意思 System.Timers.Timer my...原创 2019-03-18 09:51:14 · 2897 阅读 · 0 评论 -
c#从委托到匿名方法到lambda表达式
委托委托的概念:委托是用户自定义的类,它定义了方法的类型。储存的是一系列具有相同参数和返回类型方法的地址列表,调用委托时,此委托列表的所有方法都将被执行。委托类型的定义:委托类型必须在被用来创建变量以及类型对象之前声明。委托类型的声明:1.以delegate关键字开头。2.返回类型+委托类型名+参数列表delegate void MyDel(int a)...原创 2019-08-12 14:32:22 · 296 阅读 · 0 评论 -
C#中的委托是什么?事件算不算一种委托?
一、了解委托 我们知道回调函数实际上就是方法调用的指针,也就是通常所说的函数指针。那么在.NET中,以委托的方式来实现了函数指针的概念。.NET中使用委托的主要原因是它是类型安全的,为什么呢?因为在以前,比如C中,函数指针只不过是一个指向存储单元的指针,我们无法说出这个指针实际指向什么,而委托确定了指向方法的返回值类型和参数列表。注意的是:委托并不等同于方法,而是一个引用类型。一...转载 2019-08-12 15:15:51 · 1128 阅读 · 0 评论 -
什么是控制反转(IoC)?什么是依赖注入(DI)?以及实现原理
IoC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活IoC很好的体现了...转载 2019-09-04 18:12:08 · 705 阅读 · 0 评论 -
C# 委托和事件
什么是委托委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。用最通俗易懂的话来讲,你就可以把委托看成是用来执行方法(函数)的一个东西。委托的声明public delegate void MyEventHandler(string str);在C#中原创 2017-11-03 11:39:59 · 176 阅读 · 0 评论 -
IIS+Asp.Net Mvc必须知道的事(解决启动/重启/自动回收站点后第一次访问慢问题)
问题现象:Asp.net Mvc站点部署在IIS上后,第一个用户第一次访问站点,都会比较慢,确切的说是访问站点的Action页面(即非静态页面,因为静态页面直接由IIS处理返回给用户即完成请求,而Action页面IIS要转交给Aspnet_Wp工作进程,进而涉及相关初始化操作,这些初始化操作是比较慢的。第二次访问站点就不需要再初始化了所以就快了)。 这种第一次访问慢的问题不仅发生在网站第一...转载 2018-09-18 10:28:44 · 1454 阅读 · 0 评论 -
【ASP.NET MVC系列】浅谈ASP.NET框架
本篇文章稍微偏原理且底层,有一定难度和且比较晦涩,文章粒度稍微粗些,更细粒度的,会在后续的文章中,结合具体的Demo实例分析。感兴趣的朋友,可以先收藏。一 .NET框架概述 1.作用:提供了基于.NET框架开发的基础平台和模板,为.NET开发的基架;2.基本构成:可支持语言,CLS,模板框架,基本模板,基本操作,基本类库,公共需要运行时,CTS和CLS,OS等; (1...转载 2018-09-12 13:57:16 · 9152 阅读 · 1 评论 -
.NET 处理jsonp请求,后台代码
首先我们需要定义一个JsonpResult. 代码像这样, 直接继承自JsonResult, override了ExecuteResult方法public class JsonpResult : JsonResult{ private static readonly string JsonpCallbackName = "callback"; private static ...原创 2018-08-24 14:08:42 · 1780 阅读 · 0 评论 -
C# 搭建一个简单的WebApi项目
一、创建Web API1、创建一个新的web API项目启动VS 2013,并在“开始页”选择“新项目”。或从“文件”菜单选择“新建”,然后选择“项目”。在“模板”面板中选择“已安装模板”,并展开“Visual C#”节点。选择该节点下的“Web”。在项目模板列表中选择“ASP.NET MVC 4 Web应用程序”。 在“新的ASP.NET MVC 4项目”对话框中选择“Web API” 二原创 2017-10-19 15:10:30 · 115443 阅读 · 20 评论 -
如何在ashx页面获取Session值
在一般事务处理页面,如果直接使用Session获取值HttpContext.Current.Session[“CheckCode”]的话是会报 “未将对象引用设置到对象的实例”的异常所以,如果要想取Session中的值 ,需要如下所示1、引入 命名空间:using System.Web.SessionState;2、实现IRequiresSessionState接口,具体如下 using Sys原创 2017-11-24 10:51:49 · 1183 阅读 · 0 评论 -
c#文件读取和写入
添加命名空间using System.IO;using System.Text;把字符串用指定的编码写入到指定的文件中,如果文件不存在或目录不存在则创建。/// <summary>/// 把字符串用指定的编码写入到指定的文件中,如果文件不存在或目录不存在则创建。/// </summary>/// <param name="data"></param>/// <param name="pat原创 2017-12-11 15:52:36 · 341 阅读 · 0 评论 -
using(){}的使用
using(){}作为语句,用于定义一个范围,在此范围的末尾将释放对象。using 语句允许程序员指定使用资源的对象应当何时释放资源。using 语句中使用的对象必须实现 IDisposable 接口。此接口提供了 Dispose 方法,该方法将释放此对象的资源。例如:using (SqlCommand cmd = new SqlCommand(SQLString, connection)){原创 2017-11-16 17:08:10 · 11312 阅读 · 3 评论 -
AnkhSvn安装及使用
下载: http://download.csdn.net/download/lwpoor123/10040718安装: 直接点击下一步完成安装使用: 打开vs—文件—添加—subversion project 添加一个svn地址: 添加完成后可以看到vs底部多了一个Pending Changes,在这里管理代码 如果没有找到Pending Changes,可在 视图—其他窗口—Pend原创 2017-10-26 17:04:31 · 12950 阅读 · 0 评论 -
request.urlreferrer的用法
Request.UrlReferrer 实现页面刷新在使用Ajax 异步提交表单的时候,需要返回某些状态信息或者请求的数据,需要刷新当前页面。但如果把需要返回的如分页、过滤的参数写在控制器的参数里面,这样会比较麻烦。 因此,1、可以在控制器里面使用 Request 对象的请求的URL. Request.UrlReferer.if (Request.UrlReferrer != null){va原创 2017-10-26 11:07:42 · 5857 阅读 · 0 评论 -
关于 未能加载文件或程序集“”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 的解决办法
这是C#中经常遇到的一个问题‘未能加载文件或程序集“”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 ’,最常见的错误原因是:config配置文件里面声明的dll版本与引用的dll版本不一致导致的。 这里声明的Newtonsoft.Json的版本是6.0.0.0,再看一下我们引用的Newtonsoft.Json版本。 可以看到,我们引用的Newtonsoft.Json版本是原创 2017-10-26 10:17:40 · 60755 阅读 · 4 评论 -
C# 实现WebSocket服务端实例
WebSocket协议是一种双向通信协议,它建立在TCP之上,同http一样通过TCP来传输数据,但是它和http最大的不同有两点: 1.WebSocket是一种双向通信协议,在建立连接后,WebSocket服务器和Browser/UA都能主动的向对方发送或接收数据,就像Socket一样,不同的是WebSocket是一种建立在Web基础上的一种简单模拟Socket的协议; 2.WebSocket原创 2017-10-30 10:58:52 · 42798 阅读 · 6 评论 -
c# md5加密算法实例
1、获取MD5加密字符串/// <summary>/// 获得MD5加密字符串/// </summary>/// <param name="s">源字符串</param>/// <returns>目标字符串</returns>public static String MD5(String s){原创 2017-11-01 09:23:52 · 4040 阅读 · 0 评论 -
c# MVC中的ViewData、ViewBag
一、ViewBag和ViewData的定义public dynamic ViewBag { get; } public ViewDataDictionary ViewData { get; set; } 二、ViewBag和ViewData的区别 ViewData ViewBag 它是key/value字典集合 它是dynamic类型对象 从asp.net mvc1就有了原创 2017-10-20 18:06:47 · 6653 阅读 · 0 评论 -
ASP.NET WebApi 路由配置
一、模板路由1、在App_Start文件夹下面的WebApiConfig,默认路由配置为:using System;using System.Collections.Generic;using System.Linq;using System.Web.Http;namespace testAPI{ public static class WebApiConfig {原创 2017-10-19 16:30:48 · 11570 阅读 · 0 评论