.Net Framework

聊一聊Asp.net过滤器Filter那一些事

孤街浪徒 提交于 2020-10-16 13:20:11
   最近在整理优化 .net代码时,发现几个很不友好的处理现象:登录判断、权限认证、日志记录、异常处理等通用操作,在项目中的action中到处都是。在代码优化上,这一点是很重要着力点。这时.net中的过滤器、拦截器(Filter)就派上用场了。现在根据这几天的实际工作,对其做了一个简单的梳理,分享出来,以供大家参考交流,如有写的不妥之处,多多指出,多多交流。 概述: .net中的Filter中主要包括以下4大类:Authorize(授权),ActionFilter(自定义),HandleError(错误处理)。 过滤器 类名 实现接口 描述 授权 AuthorizeAttribute IAuthorizationFilter 此类型(或过滤器)用于限制进入控制器或控制器的某个行为方法,比如:登录、权限、访问控制等等 异常 HandleErrorAttribute IExceptionFilter 用于指定一个行为,这个被指定的行为处理某个行为方法或某个控制器里面抛出的异常,比如:全局异常统一处理。 自定义 ActionFilterAttribute IActionFilter 和 IResultFilter 用于进入行为之前或之后的处理或返回结果的之前或之后的处理,比如:用户请求日志详情日志记录 AuthorizeAttribute :认证授权

正确使用'收益率'

こ雲淡風輕ζ 提交于 2020-10-16 05:27:17
问题: The yield keyword is one of those keywords in C# that continues to mystify me, and I've never been confident that I'm using it correctly. yield 关键字是C#中那些继续使我神秘化的 关键字 之一,而且我从未确信我正确使用它。 Of the following two pieces of code, which is the preferred and why? 以下两段代码中,哪个是首选,为什么? Version 1: Using yield return 版本1: 使用收益率返回 public static IEnumerable<Product> GetAllProducts() { using (AdventureWorksEntities db = new AdventureWorksEntities()) { var products = from product in db.Product select product; foreach (Product product in products) { yield return product; } } } Version 2: Return the list 版本2:

Markdown简易教程

倾然丶 夕夏残阳落幕 提交于 2020-10-15 22:59:51
一、快捷键 功能 快捷键 加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl + Q 插入链接 Ctrl + L 插入代码 Ctrl + K 插入图片 Ctrl + G 提升标题 Ctrl + H 有序列表 Ctrl + O 无序列表 Ctrl + U 横线 Ctrl + R 二、基本语法 1、标题 使用#号可表示 1-6 级标题,1级标题对应一个#号,2级标题对应两个#号,以此类推。 2、字体 2.1 加粗 要加粗的文字左右分别用**包起来。 **加粗** 1 2.2 斜体 要倾斜的文字左右分别用*号包起来。 *斜体* 1 2.3 斜体加粗 要倾斜和加粗的文字左右分别用***号包起来。 ***斜体加粗*** 1 2.4 删除线 要加删除线的文字左右分别用~~号包起来。 ~~删除线~~ 1 2.5 下划线 下划线可以通过 HTML 的 <u> 标签来实现。 <u>下划线</u> 1 2.6 脚注 脚注是对文本的补充说明。 格式:[^要注明的文本] 例:我买几个橘子去。你就在此地,不要走动。 [^1] [^1]:出自《背影》 1 2 3 3、分割线 用三个以上的*、-、_来建立一个分隔线,行内不能有其他东西。也可以在*或是-中间插入空格。 ******** -------- 1 2 4、列表 4.1 无序 无序列表使用星号*、+或是-作为列表标记。 * 第一项 * 第二项

.NET 异步详解

*爱你&永不变心* 提交于 2020-10-15 21:34:35
前言 博客园中有很多关于 .NET async / await 的介绍,但是很遗憾,很少有正确的,甚至说大多都是“从现象编原理”都不过分。 最典型的比如通过前后线程 ID 来推断其工作方式、在 async 方法中用 Thread.Sleep 来解释 Task 机制而导出多线程模型的结论、在 Task.Run 中包含 IO bound 任务来推出这是开了一个多线程在执行任务的结论等等。 看上去似乎可以解释的通,可是很遗憾,无论是从原理还是结论上看都是错误的。 要了解 .NET 中的 async / await 机制,首先需要有操作系统原理的基础,否则的话是很难理解清楚的,如果没有这些基础而试图向他人解释,大多也只是基于现象得到的错误猜想。 初看异步 说到异步大家应该都很熟悉了,2012 年 C# 5 引入了新的异步机制: Task ,并且还有两个新的关键字 await 和 async ,这已经不是什么新鲜事了,而且如今这个异步机制已经被各大语言借鉴,如 JavaScript、TypeScript、Rust、C++ 等等。 下面给出一个简单的对照: 语言 调度单位 关键字/方法 C# Task<> 、 ValueTask<> async 、 await C++ std::future<> co_await Rust std::future::Future<> .await

关于dotnet跨平台 和 移动开发&人工智能 微信公众号

爱⌒轻易说出口 提交于 2020-10-15 19:55:06
dotNET跨平台 《dotNET跨平台》是国内首个以.NET程序员、技术文化、新闻为主题的公众号,拥有超过6万读者。在这里你可以谈微软.NET,Mono的跨平台开发技术,也可以谈谈其他的跨平台技术。在这里可以让你的.NET项目有新的思路,不局限于微软的技术栈,横跨Windows,Linux主流平台。 移动开发和人工智能 专注于微软.NET技术的机器学习和移动开发资讯,致力于AI技术民主化,平民化。 来源: oschina 链接: https://my.oschina.net/u/4408225/blog/4336077

Java匹马行天下之学编程的起点——高级语言大锅烩

◇◆丶佛笑我妖孽 提交于 2020-10-15 07:16:32
学编程的起点——高级语言大锅烩 前言: 学知识前总想说点鸡汤,想喝的朋友就看看,不想喝的就直接看干货吧,就当鸡汤是给我自己喝的。 前段时间在网上看了一句话感觉挺触动我的,我做个分享: 如果你觉得你的祖国不好,你就去建设它; 如果你觉得政府不好,你就去考公务员去做官; 如果你觉得人民没素质,就从你开始做一个高素质的公民; 如果你觉得同胞愚昧无知,就从你开始学习并改变身边的人, 她(他,它)有缺点,我们一起修正,而不是一昧的谩骂,抱怨,逃离。 横眉冷对千夫指,俯首甘为孺子牛。 “你所站立的地方,正是你的中国; 你怎么样,中国便怎么样; 你是什么,中国便是什么; 你若光明,中国便不黑暗”, 愿中国青年都摆脱冷气,只是向上走,不必听自暴自弃者流的话。 能做事的做事,能发声的发声。 有一分热,发一分光,就像萤火一般, 也可以在黑暗里发一点光,不必等候炬火。 此后如竟没有炬火,我们便是唯一的光 。 虽然抄了一遍,依然振奋不已, 我虽是小小大学生,小小程序员,可我愿意传递充满正能量的光,从我做起! 高级语言大锅烩 话接上文,上文《 走进编程的殿堂 》中,我用自导自演的大白话讲了编程语言的演化过程,我想看完上篇,大家对编程语言有了一定的认识,那接下来,我来详细介绍一下有哪些高级语言以及他们的适用环境。 2019年9月编程语言排行榜TOP20 : 2019年9月编程语言排行榜top10的柱状图

[译] APT分析报告:04.Kraken

别来无恙 提交于 2020-10-15 06:42:04
这是作者新开的一个专栏,主要翻译国外知名的安全厂商APT报告文章,了解它们的安全技术,学习它们溯源APT组织的方法,希望对您有所帮助。前文分享了APT组织Fin7 / Carbanak的Tirion恶意软件,包括OpBlueRaven行动。这篇文章将介绍一种新型无文件APT攻击Kraken,它会利用Windows错误报告服务逃避检测。其中,DllMain函数反分析检查,以确保它不在分析/沙箱环境或调试器中运行非常值得我们学习。 Malwarebytes研究人员发现了一种名为Kraken的新攻击,该攻击利用Windows错误报告(WER)服务以逃避检测。攻击始于一个包含“Compensation manual.doc”的ZIP文件。该文档包含一个恶意宏,该宏使用CactusTorch VBA模块的修改版,通过使用VBScript将.Net编译的二进制文件加载到内存中来执行,以进行无文件攻击。该二进制文件通过将嵌入式Shellcode注入Windows错误报告服务(WerFault.exe)来推进了感染链,此策略用于尝试逃避检测。 原文标题:Release the Kraken: Fileless APT attack abuses Windows Error Reporting service 原文链接: https://blog.malwarebytes.com

实验三:UML建模工具的安装与使用

十年热恋 提交于 2020-10-15 02:21:16
一、 实验目的 1) 学习使用 EA(Enterprise Architect) 开发环境创建模型的一般方法; 2) 理解 EA 界面布局和元素操作的一般技巧; 3) 熟悉 UML 中的各种图的建立和表示方法; 4) 掌握如何通过 EA 工具完成相关模型的建立 二、 实验内容及步骤 1. EA 开发环境的介绍 (1) 开始——>运行——>Enterprise Architect, 打开 Enterprise Architect 软件。 进入软件 之后, 可以选择新建一个项目。 在新建项目时, 系统会提示选择所需要的模型设计。 (2) 选择了所需要的模型之后, 可以看到, 在界面的右侧出现了相应的导航栏。 如下图所 示, 在导航栏里面列出了刚才所选择的系统模型。 (3) 假设选择用例建模, 那么可以从左侧的工具面板中拖拽出一个参与者, 并为它命名。 这样在系统里面就多了一个叫做“用户” 的参与者。 (4) 以同样的方式从左侧工具面板中拖曳一个用例, 命名为“用例一” 。 (5) 同样通过拖拽的方式, 建立用例与参与者之间的关系。 对这个关联关系, 我们还可 以设置更加细化的约束。 2. 采用EA工具完成以下ATM示例系统的UML模型的建立。 通过 EA 工具完成相关 UML 图的绘制。在建立过程中尝试理 解模型元素,模型元素之间的关系。 一、功能性需求 1、卡处理 2、取款 3

小白零基础学习Java编程好学吗?

一曲冷凌霜 提交于 2020-10-14 21:48:25
  Java作为一门基础性编程语言,伴随着IT行业的兴起。目前,学习Java的人变得越来越多,但是想要学好Java通过自学可没有那么容易,尤其是对于初学者而言。那么小白零基础学习Java编程好学吗?   IT行业是许多人趋之若骛的行业,是许多大学生出了校门之后的首要选择。而Java学科作为目前最热门的专业,因为其就业薪资高,比较容易找到工作,受到众多IT人士的追捧。但也有许多人觉得学习Java难度比较大,有些人甚至都没有接触过编程语言。这也导致了Java虽然是软件行业最流行的技术,占领开发者总数的半壁江山,但始终人才紧缺的根本原因。   其实零基础从来都不可怕,可怕的是没有凿山开路的决心。如果你的内心真的对IT行业感兴趣,对Java语言感兴趣,那么你就多鼓励自己。或者你可以根据多种渠道来学习有关Java方面的知识。可以通过网络看有关Java方向的基础视频,但这条路走起来会比较艰辛。因为网络上的信息是没有经过专业人士筛选和进行系统整理的。对于零基础的学员来说,浏览繁多的信息会变得非常吃力,也有接收不完整或者错误知识的风险。因为计算机讲究一个逻辑思维能力,说白了就是做事要讲究条理性,能够举一反三。   另外学习Java除了英语作为硬核技能外,在Java中面向对象的知识点也是非常重要。因为Java是面向对象的一种开发语言,所以在学习过程中掌握Java面向对象还是非常重要的。什么是类

开源DataGridView扩展(2) 自定义的Button列

前提是你 提交于 2020-10-14 19:46:41
一、 DataGridView自带的Button列的缺点 1. 按钮大小不能控制。 2. 按钮文本要么是统一要么就跟单元格内容一致,不能根据具体内容划分几种类型。 3. 按钮的启用/禁用不容易按照内容来自动绑定。 4. 按钮的显示/隐藏也不容易按照内容自动绑定。 5. 按钮的点击事件不能直接抛出,只能靠捕获CellContentClick事件。 6. 一列不能有多个按钮。 二、 DataGridViewEx中是否解决这些问题 1. 如以上图中所示,使用重绘机制,在定义实现的Button列中的可以实现按钮的大小固定,不随单元格改变。并且在Column中可以设置统一的 的按钮大小,但是也可以分别设置每一个按钮的大小,既大小可以不相同。 2. 自定义表格中使用Column中的统一默认文本,同时也提供对每一个单元格中的按钮进行单独的设置,这样就可以结合后面的单元格内容格式化 器来实现不同类型的内容显示不同的按钮了。 3. 在自定义的Button列中支持单个按钮的启用/禁用、显示/隐藏。这个也可以通过下一讲中的单元格内容格式化器来实现绑定。 4. 在自定义的Button列中单独对按钮的点击事件直接抛出给DataGridVieEx层,由DataGridViewEx的CellButtonClicked事件绑定即可,这样就 不用再CellClick中绑定