.Net Framework

Nginx + Docker 多阶段构建的部署学习

那年仲夏 提交于 2020-10-13 07:39:08
  前几天部署了一个网站,原来我一直是发布完成之后,通过ftp把文件上传上去,有几个大佬给我说了多阶段构建,此时我就不需要发布再搞了,直接将项目添加docker支持。 #See https: // aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. FROM mcr.microsoft.com /dotnet/core/aspnet: 3.1 -buster-slim AS base WORKDIR / app EXPOSE 80 FROM mcr.microsoft.com /dotnet/core/sdk: 3.1 - buster AS build WORKDIR / src COPY [ " amusinghoS.App/amusinghoS.App.csproj " , " amusinghoS.App/ " ] COPY [ " amusinghoS.Entity/amusinghoS.EntityData.csproj " , " amusinghoS.Entity/ " ] COPY [ " amusinghoS.Shared/amusinghoS.Shared.csproj "

结合jquery的前后端加密解密 适用于WebApi的SQL注入过滤器 Web.config中customErrors异常信息配置 ife2018 零基础学院 day 4 ife2018 零基础...

生来就可爱ヽ(ⅴ<●) 提交于 2020-10-13 06:38:32
在一个正常的项目中,登录注册的密码是密文传输到后台服务端的,也就是说,首先前端js对密码做处理,随后再传递到服务端,服务端解密再加密传出到数据库里面。Dotnet已经提供了RSA算法的加解密类库,我们只需要引用下就好,前端js也有对RSA算法的封装,解决了加解密算法之后,剩下的就是要确保公私钥的传输了,前端使用公钥加密,服务端使用私钥解密,如此才能成功,要不然会出问题。同时,在前端,我们可以首先使用bootstrapValidator来约束密码的类型,因为可能会遇到一些"+"什么的不能加密,建议在前端使用$.trim()去掉空格,再进行密码的加密。同时,如果注册失败,应该清空文本框,重新输入密码. Asp.Net Core中使用RSA加密 一文基于asp.net core mvc结合jquery很好的完成了前后端的加解密,我已经从头到尾跑了一遍,没有问题。完全可以部署在我们的项目中。 适用于WebApi的SQL注入过滤器 开发工具:Visual Studio 2017 C#版本:C#7.1 最有效的防止SQL注入的方式是调用数据库时使用参数化查询。 但是如果是接手一个旧的WebApi项目,不想改繁多的数据库访问层的代码,应该如何做。 我的解决方案是加一个过滤器。 先写过滤方法,上代码 using System; using System.Collections.Generic;

C#状态机Stateless

删除回忆录丶 提交于 2020-10-13 05:00:02
最近在折腾一些控制相关的软件设计,想起来状态机这个东西,对解决一些控制系统状态切换还是挺有用的。 状态机(有限状态自动机)网上有很多 介绍 。简单理解就是定义一系列状态,通过一系列的事件,可以使得状态可以相互之间切换。 如果不使用状态机的思想来编程,那么针对过程的编程方法会使得程序拓展性变差,并且不容易调试。而状态机只需要定义好了各种状态和状态切换之间的事件,你只管触发事件,剩下的事情它自己就自动完成了(毕竟名称叫做有限状态自动机),这对于很多需要定义各种控制阶段的系统简直是完美适配。了解到.NET也有很多库可以实现这些功能,本文主要介绍一下Stateless的应用。 Stateless介绍 Stateless 可以创建极简的状态机与对应的工作流。很多项目(包括VisualStudio Extension、AIlab)都有使用到它。 它支持以下特性: 支持各种类型作为状态和触发事件 支持状态继承 支持状态进入/离开事件 支持条件状态转移 支持状态/转移查询 也有几点需要注意的: 它支持异步语法,但是它是单线程的,不是线程安全的。 可以导出DOT graph 安装起来很简单,直接在nuget中安装即可: Install-Package Stateless Stateless使用 用起来也挺简单的,以打电话这个事情为例,针对打电话的种种动作和状态做成一个状态机。

学习英文之社区,博客及源码

南笙酒味 提交于 2020-10-12 18:35:31
前言(Introduction) 前些天写了一篇《 程序猿也爱学英语(上),有图有真相 》,大概介绍了我学英语的一些基本资料以及心得体会,先后从发音(Pronunciation, 基本常用单词积累(Vocabulary), 新概念英语(New Concept English), 究竟需不需要学语法(English Grammar?), 走遍美国(Family Album U.S.A.), 常用英语(Daily English Situations), 老友记/六人行(Friends),享受英语的乐趣(Enjoy English)等进行了一些论述。 在写作这几篇《程序猿也爱学英语,有图有真相》文章的过程中,发生了两件比较重要的事情: 1. 在我的强烈推荐下,老婆也爱上了看《老友记》。因为是无字幕版的,刚开始的时候,她听不太懂,但是到了第三季的时候就慢慢爱上了它。现在她把一到十季整整看完一遍了,期间整个房间都是她的欢声笑语!借此机会也想对其他有同样问题的朋友说:“坚持就是胜利!” 2. 经过几个月的努力,老婆终于找到自己满意的工作!对于这个Offer,可以说是来之不易,因为老婆没有任何跨国公司的经验且才来新加坡几个月,所以对她来讲是完全在一个不熟悉的英语环境,而且还要面对各种面试,其中的辛酸苦辣我也看在眼里,痛在心底。作为老公,希望她的工作一切顺利! 扯远了,回归正题,

秋天除了桂花沁人心脾的香味,还有大闸蟹无比鲜美的味道,还有优惠

心已入冬 提交于 2020-10-12 14:51:39
大家好,我是dotNET跨平台和张队长的忠实粉丝,也是一名爱吃螃蟹的程序员。先说点题外话,我工作和生活都在苏州,这几年苏州 .NET方向好的工作机会越来越少,所以逼得我也换了技术栈,但咱对 .NET的这颗真心是永不会变的,巨硬大法好。 我特别喜欢这金秋时节满城桂花飘香的苏州城,走在路边,你总会闻到那让你陶醉的桂花香味,让人止步不前、想多闻一闻;这种感觉就像我吃了一只大闸蟹后,还想再来一只的感觉,真是停不下来。 上上上上周,我在dotNET跨平台的优选商城买了一箱猕猴桃,味道鲜甜、汁水也多,家人们都很满意。 其实,我基本上每年都会在dotNET跨平台优选商城买几次“程序员家的好吃的”,人生果、苹果、猕猴桃等。从去年开始我们家的大闸蟹也加入了 “程序员家的好吃的” 小队伍,并且也得到了很多同行前辈们的支持,对我们家的大闸蟹都还挺满意的。今年的螃蟹其实之前已经开始卖了,但卖的都是母蟹,现在公蟹也已经足够成熟了,所以又到了垂涎欲滴的时候了。 为了感谢同行前辈们的支持,我们来给大家送实惠啦! 只要是在dotNET跨平台优选商城中购买我家大闸蟹,不管是买哪个规格的螃蟹,一律都送两只3两的公蟹, 但是仅限10月10日到15日这五天,另外我在优选商城中添加了30张10元面值的优惠券,只要买大闸蟹就可以使用,数量有限、先到先得哟。 关于发货 我们家大闸蟹都是现捕现发,下单后不保证当日可发货

.net intallutil.exe 安装服务报错:未能加载文件或程序集(异常来自 HRESULT:0x80131515)

亡梦爱人 提交于 2020-10-12 05:28:35
#事故现场: 使用intallutil.exe 安装windows服务报错: 在初始化安装时发生异常: System.IO.FileLoadException: 未能加载文件或程序集“file:///D:\PsUserServices\PsUserServices.exe”或它的某一个依赖项。不支持操作。 (异常来自 HRESULT:0x80131515)。 #分析及解决方法: 因为服务的安装文件是从其他电脑复制过来的,有可能是被系统锁定了; 在“PsUserServices.exe”文件上右键,属性, 果然是被锁定了,勾选解除锁定,再次安装服务,成功!!! 来源: oschina 链接: https://my.oschina.net/u/4393036/blog/4276107

WPF 获取某个窗口的所有子窗口

瘦欲@ 提交于 2020-10-12 04:02:40
如果不用到 Win32 方法,可以尝试遍历所有窗口获取 Owner 判断,不过此方法仅仅适合只有一个主线程 通过 Win32 的 EnumChildWindows 可以拿到某个窗口句柄的所有子窗口,大概用法如下,先定义一个辅助类 public class WindowHandleInfo { public static List<IntPtr> GetAllChildHandles(IntPtr handle) { List<IntPtr> childHandles = new List<IntPtr>(); GCHandle gcChildhandlesList = GCHandle.Alloc(childHandles); IntPtr pointerChildHandlesList = GCHandle.ToIntPtr(gcChildhandlesList); try { EnumWindowProc childProc = new EnumWindowProc(EnumWindow); EnumChildWindows(handle, childProc, pointerChildHandlesList); } finally { gcChildhandlesList.Free(); } return childHandles; } private delegate

KDD Cup 2020 Debiasing比赛冠军技术方案及在美团广告的实践

浪子不回头ぞ 提交于 2020-10-12 03:47:45
ACM SIGKDD (国际数据挖掘与知识发现大会,简称 KDD)是数据挖掘领域的国际顶级会议。美团到店广告平台搜索广告算法团队与中科院大学共同组建参赛队伍Aister,参加了Debiasing、AutoGraph、Multimodalities Recall三道赛题,最终在Debiasing赛道中获得冠军(1/1895),在AutoGraph赛道中也获得了冠军(1/149),并在Multimodalities Recall赛道中获得了季军(3/1433)。本文将介绍Debiasing赛题的技术方案,以及团队在广告业务中偏差消除的应用与研究。 背景 ACM SIGKDD (国际数据挖掘与知识发现大会,简称 KDD)是数据挖掘领域的国际顶级会议。KDD Cup比赛是由SIGKDD主办的数据挖掘研究领域的国际顶级赛事,从1997年开始,每年举办一次,是目前数据挖掘领域最具影响力的赛事。该比赛同时面向企业界和学术界,云集了世界数据挖掘界的顶尖专家、学者、工程师、学生等参加,为数据挖掘从业者们提供了一个学术交流和研究成果展示的平台。KDD Cup 2020共设置五道赛题(四个赛道),分别涉及数据偏差问题(Debiasing)、多模态召回问题(Multimodalities Recall)、自动化图学习(AutoGraph)、对抗学习问题和强化学习问题。

理解C#中的ConfigureAwait

◇◆丶佛笑我妖孽 提交于 2020-10-12 03:45:58
原文: https://devblogs.microsoft.com/dotnet/configureawait-faq/ 作者:Stephen 翻译:xiaoxiaotank 静下心来,你一定会有收获。 七年前(原文发布于2019年).NET的编程语言和框架库添加了 async/await 语法糖。自那以后,它犹如星火燎原一般,不仅遍及整个.NET生态,还被许许多多的其他语言和框架所借鉴。当然,.NET也有很大改进,就拿对使用异步的语言结构上的补充来说,它提供了异步API支持,并对 async/await 的基础架构进行了根本改进(特别是 .NET Core中性能和可分析性的提升)。 然而,大家对 ConfigureAwait 的原理和使用仍然有一些困惑。接下来,我们会从 SynchronizationContext 开始讲起,然后过渡到 ConfigureAwait ,希望这篇文章能够为你解惑。废话少说,进入正文。 什么是SynchronizationContext? System.Threading.SynchronizationContext 的文档是这样说的:“提供在各种同步模型中传播同步上下文的基本功能”,太抽象了。 在99.9%的使用场景中, SynchronizationContext 仅仅被当作一个提供虚(virtual) Post 方法的类

C#中的原子操作Interlocked,你真的了解吗?

社会主义新天地 提交于 2020-10-11 01:45:03
阅读目录 背景 代码描述 越分析越黑暗 结语 一、背景   这个标题起的有点标题党的嫌疑[捂脸],这个事情的原委是这样的,有个Web API的站点在本地使用Release模式Run的时候出现问题,但是使用Debug模式则不会。通过打日志定位到问题在如下的这个代码这里:   private static int _flag; public void ExactlyOnceMethod() { var original = Interlocked.Exchange( ref _flag, 1 ); if (original == _flag) { // 1.重复进入 } else { // 2.第一次进入 } }   理论上,会有一次请求进入到2中,但是实际问题是全部都进入到了1中。 二、代码描述   这个代码很简单,就做了2个事情,1是使用Interlocked.Exchange将_flag变量进行赋值。2是将Interlocked.Exchange操作后返回的原始值与_flag变量进行对比,如果相等说明这个变量已经被修改过了,表示这里是重入了。如果不是则说明第一次进入此方法。   关于Interlocked.Exchange的解释,见微软官网文档,传送门在此: https://msdn.microsoft.com/zh-cn/library/d3fxt78a.aspx 三