摘要: 我只发现IOptions的一个用处——方便了在.NET Core应用程序中使用强类型配置。如果没有IOptions,使用强类型配置需要自己解决下面2个问题:1)将配置文件(比如appsettings.json)中的配置反序列化至配置类的实例中;2)注入配置类的单例阅读全文
posted @ 2017-04-20 21:48 dudu 阅读(34) 评论(0) 编辑
摘要: 对于用于保存记录添加时间的数据库日期字段,我们通常会设置一个 GETDATE() 的默认值,而不是在应用程序的代码中获取当前时间进行保存,这样可以避免由于web服务器时钟不同步引起的时间偏差。 Entity Framework Core 在设计时贴心地考虑到这个场景,提供了 .HasDefaultValueSql() 映射配置,今天在实际开发中体检了一下,的确管用。阅读全文
posted @ 2017-04-20 18:20 dudu 阅读(55) 评论(2) 编辑
摘要: 参考 How To Install and Use Docker: Getting Started 这篇最靠谱的文档在阿里云 Ubuntu 14.04 服务器上成功安装 docker 。 1)更新 apt 的安装包列表 2)升级所有已安装的包 3)添加 apt 验证密钥 4)添加 docker 安装阅读全文
posted @ 2017-04-14 13:03 dudu 阅读(72) 评论(0) 编辑
摘要: 今天在一个集成测试项目中实际使用 ASP.NET Core 的 user secrets 保存敏感配置信息,避免了直接保存在 appsettings.json 中,在这篇随笔中记录一下。使用 user secrets 有两个有点麻烦的地方,需要手工在 .csproj 中添加两个配置。一个是 UserSecretsId ,一个是 DotNetCliToolReference阅读全文
posted @ 2017-04-13 10:45 dudu 阅读(74) 评论(1) 编辑
摘要: 这是这两天ASP.NET Core迁移中遇到的一个问题。2个ASP.NET Core站点(对应于2个不同的ASP.NET Core Web应用程序),2个站点都可以登录,但在其中任1个站点登录后,在当前站点处于登录状态,访问另外1个站点却处于未登录状态。阅读全文
posted @ 2017-03-03 12:58 dudu 阅读(229) 评论(1) 编辑
摘要: 今天将一个迁移至 ASP.NET Core 的项目放到一台 Linux 服务器上试运行。站点启动后,浏览器打开一个页面一直处于等待状态。接着奇怪的事情发生了,整个 Linux 服务器响应缓慢,ssh命令行输入都一顿一顿的,过了一会,直接停止响应,down机了,必须强制重启服务器才行。阅读全文
posted @ 2017-02-15 17:33 dudu 阅读(391) 评论(0) 编辑
摘要: ASP.NET Core Data Protection 不仅提供了非对称加密能力,而且提供了灵活的秘钥存储方式以及一致的加解密接口(Protect与Unprotect)。Session中用到了它,Cookie验证中用到了它,OpenIdConnect中也用到了它。。。当然你也可以在应用开发中使用它,比如这篇博文中就是用它生成激活帐户的验证token阅读全文
posted @ 2017-02-13 20:52 dudu 阅读(202) 评论(0) 编辑
摘要: 在你将现有的用户登录站点从ASP.NET迁移至ASP.NET Core时,你将面临这样一个问题——如何让ASP.NET与ASP.NET Core用户验证Cookie并存,让ASP.NET应用与ASP.NET Core应用分别使用各自的Cookie?因为ASP.NET用的是FormsAuthentication,ASP.NET Core用的是claims-based authentication,而且它们的加密算法不一样阅读全文
posted @ 2017-02-05 18:01 dudu 阅读(470) 评论(2) 编辑
摘要: 这篇英文博文是 Andrew Lock 写的 Introduction to Authentication with ASP.NET Core 。ASP.NET Core 的验证模型是 claims-based authentication 。Claim 是对被验证主体特征的一种表述。一组claims构成了一个identity,具有这些claims的identity就是 ClaimsIdentity阅读全文
posted @ 2017-02-05 12:14 dudu 阅读(319) 评论(0) 编辑
摘要: 自从微软做了一个艰难的决定——.NET Core彻底放弃project.json全面改回.csproj——至今,虽然赞美之声不断,但我依然不喜欢也难以接受这样的改变。 难以接受主要有两方面的原因:1)由繁入简易,由简入繁难;2)xml与json配置文件的混杂带来不一致的编辑体验阅读全文
posted @ 2017-02-03 21:19 dudu 阅读(736) 评论(5) 编辑
摘要: 这是今天坐公交时继续阅读这篇采访报道的收获。新一代.NET平台的三大框架是:.NET Core, .NET Framework, Mono,它们的定位分别是:.NET Core 定位于跨平台服务端应用开发;.NET Framework 定位于 Windows 桌面应用开发;Mono 定位于移动应用开发阅读全文
posted @ 2017-02-02 14:49 dudu 阅读(509) 评论(2) 编辑
摘要: 今天坐公交时用手机打开 .NET Blog 阅读这周的 The week in .NET ,在看 Virtual Panel: What's Next for .NET? 这篇采访报道时,被其中对 Richard Lander (Principal Program Manager Lead on the .NET Team at Microsoft) 的一段采访所吸引阅读全文
posted @ 2017-02-01 18:51 dudu 阅读(465) 评论(6) 编辑
摘要: 今天用 SQL Server Profiler 查看 Entity Framework Core 生成的 SQL 语句时,突然发现一个细节改进,并且被它震撼了一下。震撼之处就是这个u(表的别名),它可不是 EF Core 随意起的名字,而是来自 LINQ 代码中的命名。阅读全文
posted @ 2017-01-19 23:08 dudu 阅读(491) 评论(6) 编辑
摘要: 在 Entity Framework (非EF Core)中,当通过 EF 使用 LINQ 查询获取到一个实体时,这个实体的状态是默认被跟踪的。所以,当你修改某些实体属性的值之后调用 SaveChanges() ,EF 就会生成只针对这些被修改属性的 UPDATE SQL 语句。阅读全文
posted @ 2017-01-17 16:32 dudu 阅读(174) 评论(0) 编辑
摘要: .NET Core 迁移工作如火如荼,今天在使用 Entity Frameowork Core(又名EF Core)时写了下面这样的 LINQ 查询表达式: 结果在 SQL Server Profiler 中发现竟然进行了全表查询。 之后将 new Guid(userId) 从表达式中移出,保存于一阅读全文
posted @ 2017-01-16 22:06 dudu 阅读(297) 评论(5) 编辑
摘要: 之前在将 Memcached 客户端 EnyimMemcached 迁移 .NET Core 时被这个“坑”坑的刻骨铭心,当时以为只是在构造函数中调用异步方法才会出线死锁(deaklock)问题。最近在使用 redis 客户端 StackExchange.Redis 时也遇到了这个问题。阅读全文
posted @ 2017-01-05 14:24 dudu 阅读(634) 评论(10) 编辑
摘要: 这是在昨天的 .NET Core 迁移中遇到的问题,之前在 .NET Framework 中是这样合并 Expression阅读全文
posted @ 2016-12-30 12:30 dudu 阅读(393) 评论(3) 编辑
摘要: 通常我们在 Prgram.cs 中使用硬编码的方式配置 ASP.NET Core 站点的 Hosting 环境,最常用的就是 .UseUrls() 。 但这种硬编码绑定端口的方式会给在同一台 Linux 服务器上部署多个站点造成麻烦,因为不同站点需要绑定不同的端口。除非你在开发时就已经约定好各个项目阅读全文
posted @ 2016-12-29 15:18 dudu 阅读(206) 评论(0) 编辑
摘要: 今天在将一个项目迁移至ASP.NET Core的过程中遭遇一个循环依赖问题,错误信息如下: 一开始以为是项目之间的引用关系引起的,在project.json中找来找去,一无所获。 后来从构造函数下手,才发现问题所在。 实现ITagService的类TagService的构造函数是这么定义的: 这是很阅读全文
posted @ 2016-12-28 18:18 dudu 阅读(113) 评论(1) 编辑
摘要: 之前的博文”ASP.NET Core中显示自定义错误页面“中的方法是在项目中硬编码实现的,当有多个项目时,就会造成不同项目之间的重复代码,不可取。在这篇博文中改用middleware实现,并且放在独立的项目中发布成NuGet包,项目中使用时只需安装NuGet包,然后在Startup的Configure()方法中添加如下的一行代码。阅读全文
posted @ 2016-12-27 18:25 dudu 阅读(243) 评论(0) 编辑