对你的站点增加跨域处理

你需要在 <system.werbServer> 层级下面添加以下文本: 1 2 3 4 5 6 7 <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="*" /> <add name="Access-Control-Allow-Headers" value="Content-Type" /> <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" /> </customHeaders> </httpProtocol>

C# 值与引用类型的误区

在之前的文章 C#类与结构的区别 当中对于结构的说明存在着误区,在拜读了“深入理解C#”这本书的时候,在2.3.3节的说明当中明确指出了三种误区: “结构是轻量级的类”。 “引用类型保存在堆上,值类型保存在栈上”。 “对象在C#中默认是通过引用传递的”。 这三种经常是我们在平时工作和学习中是这样理解和认为的,在该书当中,作者对于第一个观点就已经提出了一个很好的反例,即 DateTime类型 一个对象的定义是应该使用值类型或者是引用类型,具体应该参考其语义,而不是取决于该类型简单与否。产生这个误区是因为大多数人们认为值类型不需要垃圾回收与类型标识产生开销,也不需要解引用。但是引用类型在其他的地方也更加出色,例如传递参数,赋值等操作的时候,仅需要复制4/8字节,而不需要复制全部数据。 至于第二个误区更常见,变量的值是在他声明的位置存储的,所以假定在一个类当中有一个int型的实例变量,那么在这个类的任意对象,该变量的值总是和对象的其他数据在一起,也就是存储在堆上,只有局部变量和方法参数是存储在栈上。而且对于C#2以及更高的版本,他们的某些局部变量也不都是存储在栈上的。 例如在函数式编程内的闭包: 1 2 3 4 5 6 7 8 9 10 11 12 13 public Action<int> TestMethod() { int _val = 20; Action<int> _result = x => Console.WriteLine(x * _val); return _action; } public void Test() { var _result = TestMethod(); _result(10); _result(20); } 在这里_val是一个局部变量,但是这里返回了一个action委托,只要该委托一直存在,那么会保持对_val的引用,这个时候C#会在底层创建一个匿名内,存放在堆当中,以提供给委托使用,除非委托销毁,那么对_val的引用会一直存在。 这里是一个很明显的闭包手法,闭包的作用就是在函数的作用域内保存数据,防止数据出现在无法控制其内容的地方,避免全局变量的使用。 第三个则是所有人误会的最多的的,举个栗子: 1 2 3 4 5 6 public void RefChangle(StringBuilder builder) { builder = null; } StringBuilder _sb = new StringBuilder(); RefChangle(_sb); 如果是按照常规说法,builder是按引用传递的话,那么我们在RefChangle方法内部对builder改变了它的值,所以_sb现在应该是null,然而事实并不是这样的。 在这里builder仅仅是“值传递”的_sb的一个引用地址,我们对这个引用地址的更改并不会影响到调用者的对象。 如果将RefChangle的方法方法签名改为如下则是“引用传递”:

一个由于 Action 传入参数引发的 BUG

眼看要到测试节点了,做好的东西前台使用post传参后台却接收不到参数,十分捉急。 控制器代码: 1 2 3 4 5 [HttpPost] public ActionResult BussinessAllAnalyze(ExtStatisticService.FrontIncomingFilterModel state) { return Content(state.state.ToString()); } 然后我们来看一下参数实体的代码: 1 2 3 4 5 6 public class FrontIncomingFilterModel { public int state { get; set; } public DateTime? StartTime { get; set; } public DateTime? EndTime { get; set; } } 是不是看上去没有任何问题,当你使用fiddler或者postman等进行调用的时候,会抛出null异常,因为在Action方法BussinessAllAnalyze当中state实体没有被接收到。 只要将形参名称改为其他的就能够正常接收 1 2 3 4 5 [HttpPost] public ActionResult BussinessAllAnalyze(ExtStatisticService.FrontIncomingFilterModel model) { return Content(state.state.ToString()); } 这个问题暂时还不清楚是由于什么原因引起的。 未完待续….

MySql 允许远程用户登录访问

1 2 # mysql -u root -proot mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION; 之后刷新权限即可。 1 FLUSH PRIVILEGES 服务器记得打开3306端口。

C# 当中的 AOP 实现,函数式编程

AOP的定义就是,面向切面编程。 可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,提高代码的灵活性和可扩展性,AOP可以说也是这种目标的一种实现。 它的主要功能就是将业务逻辑代码当中的公用代码提取出来,在需要的地方进行注入即可,这样能够将这些行为从逻辑代码当中分离开来,建立良好的代码体系。 举个栗子: 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 public bool InsertCustomer(string firstName, string lastName, int age, Dictionary<string, string> attributes) { if (string.
Built with Hugo
主题 StackJimmy 设计