C#
在C#开发的道路上,和大家分享遇到的问题以及解决方案。
Denny辉
愿意用一支黑色的铅笔画一出沉默舞台剧,灯光再亮也抱住你。
展开
-
.NET 配置Swagger
使用Swagger输出在线api文档非常方便,配置也非常的简单,前后端节约沟通时间,减少对接成本,是一个非常好的解决方案在使用中可能会出现以下几点问题:1、中文注释2、如果是分层架构,显示实体类的注释3、如果接口有token认证,需要在swagger中传递token头部信息首先在项目中使用nuget工具搜索swagger找到Swashbuckle,选择最新版本安装即可,顺带会自动安装一个Swashbuckle.Core包安装之后打开App_Start文件夹中的SwaggerCon原创 2021-01-15 11:54:46 · 1931 阅读 · 1 评论 -
PowerBI Report Server 集成,自定义身份验证,数据权限控制
AD认证的集成模式AD(或者Windows)认证是PBI的默认认证方式。在这种方式下,需要第三方应用也采用了AD的认证方式才可以正常的和PBI RS做集成。注意,这种方式要求第三方系统采用了AD的认证方式,并且用户在使用AD账户登录了操作系统,才能正常的不用输入登录用户名和密码去访问PBI RS或第三方系统。不用登陆的原因是用户在登陆操作系统时,已经输入了用户名和密码经过了AD的认证。这里不做第三方系统和AD集成的探讨,如果有需求,请参考微软官方的文档。在第三方系统做好了AD的集成后,与PBI RS原创 2020-12-25 15:18:42 · 5958 阅读 · 8 评论 -
IIS 自动清理日志
很多使用Windows IIS的站点可能都会遇到这个问题,就是服务器的IIS日志增长经常会导致磁盘空间被占满,而IIS也没有自动删除日志的功能,因此需要经常关注即时清理日志,因此我这里就介绍一个能够自动删除IIS日志的程序。 这个删除程序的功能很简单,每天自动删除N天前的日志(时间根据情况自己设置,一般设置为30天),可以使用DOS批处理脚本来实现。脚本内容如下:::Author: DennyHui::Desc: AutoClearIISLogFiles::2020年11月16日17:03:1原创 2020-11-16 17:12:23 · 1588 阅读 · 0 评论 -
ASP.NET MVC Outputcache特性
MVC中应用程序缓存和输出缓存的区别输出缓存:也就是Outputcache 是相对于某个Action或Controller而言。使用的场景包括某个页面的数据更新不是很频繁,不需要每次都从数据库区查询。缓存起来从内存中读取。比如文章详情,排名什么的。数据缓存:是相对于全局的。任何地方需要调用的时候都可以去调用。使用的场景包括权限管理这种模块的。每个角色对于菜单的访问都是固定的,所以有必要将角色,权限,菜单这种数据做一个全局的数据缓存。修改时再做缓存的更新。如果通俗一点来说输出缓存就像是“局部变量”原创 2020-09-22 13:43:35 · 177 阅读 · 0 评论 -
如何利用NLog输出结构化日志
什么是结构化日志?当前互联网、物联网、大数据突飞猛进,软件越复杂,查找任何给定问题的起因就越困难(且成本更高)。在实践中我们开发了各种规避、诊断应用程序错误行为的利器:静态类型检查,自动化测试,事件探查器,崩溃转储和监视系统。但是记录程序执行步骤的日志仍然是事后诊断最丰富的数据源。在日志分析时,小批量普通的文本对于人类很友好,但却很难从大量普通文本中快速定位、精准提取特定信息。.....[2018-04-07T13:45:56.789Z INF] https://example.com/原创 2020-08-07 12:45:34 · 1239 阅读 · 1 评论 -
ASP .NET Redis 分布式锁
1、背景我们在开发很多业务场景会使用到锁,例如库存控制,抽奖等。一般我们会使用内存锁的方式来保证线性的执行。但现在大多站点都会使用分布式部署,那多台服务器间的就必须使用同一个目标来判断锁。分布式与单机情况下最大的不同在于其不是多线程而是多进程。2、演变分布式站点使用内存锁方式如下图假设有3个用户同时购买一件商品,商品库存只剩下1,如果3个用户同时购买,负载均衡把3个用户分别指向站点1、2、3,那结果将会是3个用户都购买成功。下面我们使用分布式锁解决这个问题。分布式站点使用分布式.原创 2020-08-05 16:17:36 · 1872 阅读 · 1 评论 -
什么是缓存穿透? 怎么解决这一问题
缓存穿透又称缓存击穿,是指在高并发场景下缓存中(包括本地缓存和Redis缓存)的某一个Key被高并发的访问没有命中,此时回去数据库中访问数据,导致数据库并发的执行大量查询操作,对DB造成巨大的压力。解决方法:1:对缓存失效的Key加分布式锁,当一个Key在本地缓存以及Redis缓存中未查询到数据,此时对Key加分布式锁访问db,如果取到数据就反写到缓存中,避免大量请求进入DB;如果取不到数据则缓存一个空对象,这样可以保证db不会被大量请求直接挂掉,从而引起缓存颠簸,更甚者缓存雪崩效应。2:在本地原创 2020-08-05 15:40:15 · 3963 阅读 · 4 评论 -
Asp.Net MVC 操作日志拦截器
/***┌──────────────────────────────────────────────────────────────┐*│ 描 述:操作日志拦截器 *│ 作 者:Dennyhui *│ 版 本:1.0 *│ 创建时间: 2019年10月25日19:40:01.原创 2020-07-24 11:42:42 · 567 阅读 · 0 评论 -
ASP .NET MVC优化系统响应速度
如果要在将HTML发送到客户端时压缩HTML,请应用此压缩过滤器以获取最快的包交付速度。ActionFilters\CompressFilter.cspublic class CompressFilter : ActionFilterAttribute{ public override void OnActionExecuting(ActionExecutingContext filterContext) { bool allowCompression = fal原创 2020-07-20 16:33:20 · 295 阅读 · 0 评论 -
解决 ”基础连接已经关闭: 发送时发生错误”
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;原创 2020-06-30 14:52:40 · 43620 阅读 · 5 评论 -
c# 去掉字符串最后一个逗号
public string DelLastComma(string str) { try { return str.Substring(0, str.LastIndexOf(",")); } catch (Exception ex) { return str; } }.原创 2020-06-24 15:13:39 · 4665 阅读 · 0 评论 -
.NET Core发送HTTP Post和Get
/// <summary> /// 公共方法—— 发送http post请求 2020年6月2日11:20:42 Dennyhui /// </summary> /// <param name="formData">参数</param> /// <param name="requestUri">请求地址</param> /// <param n..原创 2020-06-09 16:18:12 · 5600 阅读 · 1 评论 -
.NET Core Dapper帮助类
/***┌──────────────────────────────────────────────────────────────┐*│ 描 述:使用dapper操作mysql *│ 作 者:Dennyhui ...原创 2020-04-30 15:06:29 · 1189 阅读 · 0 评论 -
.NET Core MVC appsettings帮助类
//*********************************************************************************//Description:AppSettings配置文件帮助类//Author:DennyHui//Create Date: 2020年4月21日16:35:29//***************************...原创 2020-04-30 15:05:20 · 405 阅读 · 0 评论 -
.NET Core MVC HttpContext帮助类
//*********************************************************************************//Description:HttpContext帮助类//Author:DennyHui//Create Date: 2020年4月21日16:05:56//********************************...原创 2020-04-30 15:03:54 · 426 阅读 · 0 评论 -
C# DataTable转成CSV数据流
/// <summary> ///将DataTable转换为标准的CSV,最后转成流数据 2020年4月30日13:38:21 Dennyhui /// </summary> /// <param name="table">数据表</param> /// <returns>...原创 2020-04-30 14:53:23 · 901 阅读 · 0 评论 -
c# 使用数据流的方式下载Excel
/// <summary> /// 导出excel模板 2020年4月28日18:18:18 dennyhui /// </summary> /// <param name="entityid">实体ID</param> /// <returns></return...原创 2020-04-30 14:50:57 · 1652 阅读 · 1 评论 -
.net core使用SqlBulkLoader往Mysql数据库批量导入数据
首先添加引用 Mysql.Data /// <summary> /// Mysql 数据批量导入数据库 2020年4月30日12:55:16 Dennyhui /// </summary> /// <param name="_mySqlConnection">mysql连接字符串</p...原创 2020-04-30 14:48:08 · 1078 阅读 · 0 评论 -
.net core使用IExcelDataReader读取Excel
通过读取文件的方式:FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);IExcelDataReader excelReader;//1. Reading Excel fileif (Path.GetExtension(filePath).ToUpper() == ".XLS"){ ...原创 2020-04-30 14:45:00 · 2290 阅读 · 1 评论 -
.NET Core MVC 解除上传文件大小限制
今天在做文件上传的时候发现超过30M的文件,请求会报404的错误,需要解除这个限制由于.net core没有webconfig文件我们需要在startup和program两个地方设置第一步在program文件中添加如下代码: public static IHostBuilder CreateHostBuilder(string[] args) =>//创建默认...原创 2020-04-30 14:40:41 · 835 阅读 · 0 评论 -
Redis 达到最大客户数(max number of clients reached) 连接的客户端(connected_clients)数量过高或者不减的问题解决方案
最近在项目上使用到了Redis缓存,在使用过程中遇到了一些问题,这里来总结一下。1、Redis设置成Windows启动服务:执行命令redis-server --service-install redis.windows-service.conf --loglevel verbose1、Redis运行一段时间之后,发现Redis Client连接不上了,报错 Error:max ...原创 2020-01-14 15:30:34 · 3157 阅读 · 1 评论 -
C# 使用SignalR实现消息通知
背景:Web端需要能实时接收到消息推送,当客户有新消息来时,在客户端的右下角进行弹框提醒。什么是signalR?Asp.net SignalR是微软为实现实时通信的一个类库。一般情况下,signalR会使用JavaScript的长轮询(long polling)的方式来实现客户端和服务器通信,随着Html5中WebSockets出现,SignalR也支持WebSockets通信。另外Sig...原创 2019-11-08 10:44:49 · 12179 阅读 · 1 评论 -
Asp.net 读取AD信息
新建一个控制台应用程序,添加引用:System.DirectoryServices定义参数:private static string ADPassword ="xxxxxx";private static string ADPath = "LDAP://xxx.com";private static string ADUser ="xxxxxx";private static...原创 2019-11-05 15:23:44 · 400 阅读 · 0 评论 -
C# 使用Redis缓存
Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。Nuget添加ServiceStack.Redis的引用调用方式:先封装一个公用的初始化方法 publ...原创 2019-11-02 00:35:50 · 914 阅读 · 1 评论 -
.Net分布式架构(一):Nginx实现负载均衡
一:负载均衡简介 负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。二:Nginx简介 Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由Igor Sysoev为俄罗...转载 2019-07-15 21:28:57 · 177 阅读 · 0 评论 -
C# 判断字符串是否是数字
使用正则表达式: /// <summary> /// 判断是否是数字 2019年9月22日20:54:40 Dennyhui /// </summary> /// <param name="value"></param> /// <returns>&l...原创 2019-09-23 10:33:04 · 8991 阅读 · 1 评论 -
HTTP Error 500.19 - Internal Server Error
The requested page cannot be accessed because the related configuration data for the page is invalid.解决方案:Cause:1) 没有向iis中注册.net framework(引起的原因之一:先安装了.net framework,后安装的iis) 2) 没有对IIS中...原创 2019-09-24 17:44:54 · 3483 阅读 · 1 评论 -
asp.net在Azure Function中发布自定义API
Azure Functions 用于在无服务器环境中执行代码,无需先创建 VM 或发布 Web 应用程序。需要使用VS2017及以上的版本。在“新建项目”对话框中,依次选择“已安装” > “Visual C#” > “云” > “Azure Functions”。输入项目的名称,并选择“确定”。函数应用名称必须可以充当 C# 命名空间,因此请勿使用下划线、连字符或任何...原创 2019-04-10 20:21:17 · 644 阅读 · 1 评论 -
C# 取出HTML里面的文字
public static string StripHTML(string strHtml) { string[] aryReg ={ @"<script[^>]*?>.*?</script>", @"<(\/\s*)?!?((\w+:)?\w+)(\w+(\s*=?\s*(([""'])(\\[""'tbnr]|[^\7原创 2017-06-26 15:43:38 · 2823 阅读 · 0 评论 -
power bi 使用C# SKD获取Embed Token
在把power bi 的报表嵌入到Web的时候需要先获取Embed Token, 在这之前需要在Azure上创建应用程序,这个就不在这里说了,MSDN上有文档。下面直接上代码: // Create a user password cradentials. var credential = new UserPasswordCr...原创 2019-07-15 20:36:01 · 1257 阅读 · 0 评论 -
asp.net 获取计算机全球唯一标识(非硬件)
我们编写注册程序的时候需要用到计算机唯一特征码处理器ID:同批次的ID或现在的高端处理器ID会相同网卡ID:可伪造硬盘ID:可改写主板ID、BIOSID:网吧无盘系统都相同其实微软已经给我们计算机搞了一个全球唯一ID可以使用cmd敲出来:slmgr.vbs -dti下面我们在应用程序里面使用: //获取计算机安装ID 全球唯一识别码 ...原创 2019-07-15 19:34:02 · 2331 阅读 · 0 评论 -
MVC5 禁止网站缓存数据
在我们使用asp.net Form身份验证的时候,有时候退出网站了,但是通过点击浏览器的后退按钮可以跳过登录直接进入网站首页,为了解决这个问题了,我们可以在MVC的过滤器里面来实时清除网站的缓存。解决方案:在FilterConfig文件创建如下方法:public class NoCache : ActionFilterAttribute { pub...原创 2019-07-15 19:23:51 · 300 阅读 · 0 评论 -
C# 连接 SharepointOnline WebService
使用Sharepoint Client对象模型进行数据读取: ClientContext clientContext = new ClientContext(ConfigHelper.GetConfigStr("SharepointOnlineURL")); string strPassWord = ConfigHelper.GetConfigStr("Sharep原创 2017-07-26 16:42:34 · 2404 阅读 · 0 评论 -
C# 调用WebApi
Post:private void button1_Click(object sender, EventArgs e) { string ss= HttpPost("http://localhost:41558/api/Demo/PostXXX", "{Code:\"test089\",Name:\"test1\"}"); } pu原创 2017-07-26 16:29:52 · 14888 阅读 · 1 评论 -
C# DataTable去重,根据列名去重保留其他列
//去掉重复行DataView dv = table.DefaultView;table = dv.ToTable(true, new string[] { "name", "code" });此时table 就只有name、code无重复的两行了,如果还需要id值则table = dv.ToTable(true, new string[] { "id","name", "code" });//原创 2017-07-17 23:00:29 · 4119 阅读 · 2 评论 -
C# 判断DATASET是否为空
更多文章请扫码关注公众号,有问题的小伙伴也可以在公众号上提出。原创 2017-07-21 10:25:53 · 5792 阅读 · 1 评论 -
C# 创建、部署和调用WebService的简单示例
C# 创建、部署和调用WebService的简单示例 webservice 可以用于分布式应用程序之间的交互,和不同程序之间的交互。概念性的东西就不说太多,下面开始创建一个简单的webservice的例子。这里我用的是Visual Studio 2015开发工具。首先创建一个空的Web应用程序。然后鼠标右键点击项目,转载 2017-07-20 13:05:46 · 10812 阅读 · 2 评论 -
调用 LoadLibraryEx 失败,在 ISAPI 筛选器 "c:\Windows\Microsoft.NET\Framework\v4.0.30319\\aspnet_filter.
解决方案:开始 -> 运行 -> inetmgr -> 应用程序池 -> 找到 我的网站对象的 程序池 -> 右键 -> 高级设置 -> 启用32位应用程序 由 false 改为 true原创 2017-07-20 13:01:47 · 1276 阅读 · 0 评论 -
C# 跨域清除写入Cookie
/清除写入cookie public void deleteCookie() { HttpCookie acookie = HttpContext.Current.Request.Cookies["Username"]; if (acookie != null) {原创 2017-06-11 15:05:45 · 1063 阅读 · 1 评论 -
C# 数组去重的三种方法
三种去重的方法1、List中的元素实现IEquatabe接口,并提供Equals方法和GetHashCode方法。2、使用表达式[csharp] view plain copy print?users.Where((x,i)=>users.FindIndex(z=>z.name == x.name) == i) users.Where((x,i)=>users.FindIndex(z=>z.转载 2017-06-09 14:54:58 · 32823 阅读 · 1 评论