Asp.net core在写REST服务上比之前的老版本要方便不少,我已经逐渐将ASP.Net WebAPI的REST服务往Asp .net core上迁移了。然而,在迁移的过程中,还是遇到了一些问题的。
由于Asp.net的架构如下图所示:
它的底层支撑库是.net standard,而.net framework的库和.net standard并不对等:
-
一些功能库在.net standard中没有(如图像处理等)
-
一些方法调用要改,迁移的工作量较大
-
一些依赖的第三方库没有.net standard的版本
-
一些库无法移植(如使用了Pinvoke等)
对于这些比较难迁移的服务,之前还是将其维持不变,在新服务中通过跳转的方式封装了它们。然而,今天在新建.net core web程序时发现居然还有.Net framework的选项
选中它新建项目试了一下,还真是在.net framework上承载的asp.net core程序。跑起来也没有任何问题,也可以引用其它的.net framework类库。看了一下,和.net core的版本相比,它引用了如下两个.net standard库:
也就是说,微软用.net standard将.net core中相应的库给重写了,asp.net core程序以后也可以在.net framework上快乐的玩耍了。
最后,附一个在使用的过程中遇到的问题:
用Swashbuckle.AspNetCore添加Swagger UI的时候提示出异常:System.MissingMethodException: Method not found: 'Void Microsoft.Net.Http.Headers.EntityTagHeaderValue..ctor(System.String)'.
在Github上找到了有人提交的Issue,参考该页面的方法,在Nuget上添加Microsoft.AspNetCore.StaticFiles库即可。这个应该是Swashbuckle库的锅,估计后续版本应该会在Nuget上增加该库的依赖。这里记录一下,以备和我遇到同样问题的朋友查询。