如果你也是和我一样将项目从.net core2.X 升级到3.X,我这就劝你放弃,差异太大,改不完的bug,尤其很多插件,可能是3.x太新。还没有或者是,根本不需要,总之升级之后,你会发现打出都要改,最后我决定,还是用以前的版本,没有插件的地方就自己写好了
(实际上,我现在又把它捡回来了,你说贱不贱,主要是有个大牛网页说要跟我一起写公共插件然后一起用)
现在记录一下 遇到的几个问题:
1、前端返回的格式被修改为小驼峰格式
解决办法:
services.AddControllers().AddNewtonsoftJson(); services.PostConfigure<MvcNewtonsoftJsonOptions>(options => { options.SerializerSettings.ContractResolver = new MyCustomContractResolver(); }); services.Configure<MvcNewtonsoftJsonOptions>(options => { options.SerializerSettings.ContractResolver = new MyCustomContractResolver(); });
一定要都加上,不然,你会发现有的请求返回的还是小驼峰格式。
MyCustomContractResolver的代码为:
public class MyCustomContractResolver : AbpContractResolver { protected override void ModifyProperty(MemberInfo member, JsonProperty property) { if (property.PropertyType != typeof(DateTime) && property.PropertyType != typeof(DateTime?)) { return; } property.Converter = new AbpDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" }; } }
2、ajax请求后台无法获取
这个可是把我绕了一圈,后来发现,同一个方法,有的几个页面是可以请求的,仔细对比,原来有的页面用的是@Url.Action("XXX")这种,有的是直接写地址,用@Url.Action("XXX")这种,没有自动生成域(我的页面划分了很多域),那么问题就比较简单了,
找到Startup中的路由规则,原来那里面的路由规则是将域的路由写在了默认路由的后面,修改一下顺序就好了。
3、
Processing of the LINQ expression 'DbSet<WarnProcess> .Where(t => (Nullable<bool>)t.IsActive == __input_IsActive_0) .OrderByDescending(t => t.CreationTime) .GroupJoin( outer: DbSet<HandleFlow> .Where(t => t.CreatorUserId == __input_HandleUserId_1), inner: model => model.Id, outerKeySelector: ha => ha.ProcessId, innerKeySelector: (model, handle) => new { model = model, handle = handle })' by 'NavigationExpandingExpressionVisitor' failed. This may indicate either a bug or a limitation in EF Core. See https://go.microsoft.com/fwlink/?linkid=2101433 for more detailed information.
这个就查询的语法有错误,全部注释后一点一点的打开,定位问题。有一些是自己写错了,但是在.net core 2.2下会正确编译,所以不容易发现,有一些是2.2可以这样用。3.X不行,具体看自己的代码逻辑,我也是一个一个的改。
4、直接上图
相关解决方法:
https://www.it1352.com/1558075.html
我觉得说的很明白,3.1已经兼容了,但问题是,我的项目目前的框架就是3.1,那么问题是怎么出来的呢,伤心啊,框架太新了,还找不到道友