ABP core2.2错误笔记,持续更新

注:以下问题全部基于版本 © 2019 MLCDZ. Version 4.3.0.0 [20190830]  .net core 的版本为2.2
1、System.InvalidOperationException:“Unable to determine the relationship represented by navigation property 'User.DeleterUser' of type 'User'. Either manually configure the relationship, or ignore this property using the '[NotMapped]' attribute or by using 'EntityTypeBuilder.Ignore' in 'OnModelCreating'.” 
 
原因:在EF层XXXMLCDZDbContext中OnModelCreating 下缺少对初始化的配置,加上base.OnModelCreating(modelBuilder); 就好了
2、
 An unhandled exception occurred while processing the request.
ComponentNotFoundException: No component for supporting the service MLCDZ.Web.Mvc.Areas.ABase.Controllers.DictionaryController was found
Castle.MicroKernel.DefaultKernel.Castle.MicroKernel.IKernelInternal.Resolve(Type service, IDictionary arguments, IReleasePolicy policy, bool ignoreParentContext) 
原因:1、路由规则可能没有写对了,2,Control没有继承自XXXControllerBase。
有个网友的解决办法是 https://www.cnblogs.com/saving/p/10385382.html ,但是对我没用
我的是第二条,实际上修改了控制器的继承类后,路由规则直接用默认的就可以了,都不用改
 
3、Areas 区域内页面样式丢失
这个手动在页面加上    Layout = "~/Views/Shared/_Layout.cshtml"; 引入母版页就可以了
 
4、在Areas区域中使用多语言
在区域中使用多语言会提示 当前上下文中不存在名称“L”,解决办法,将View中的_ViewImports.cshtml 复制一份到区域中就可以了
 
5、页面选择多租户的时候,有一个就是报错 AbpServiceProxies/GetAll
仔细看报错提示或者log,很有可能是后台某些地方不符合规范,我的错误是应用层方法的参数只能传一个 而我传了多个
 
6、动态修改租户ID
 ,Abp官方提供的方法都是临时的,包括,AbpSession.Use(2, AbpSession.UserId);和_unitOfWorkManager.Current.SetTenantId(TenantId),主要技巧就是要移除Claim 登出一次 再登录就可以了(花了一天半的时间,各种都尝试过了,有其他更好想法的,欢迎砸砖)

 7、同一个程序 有时候执行返回正常,有时候返回不正常,或者正常执行但是返回代码不对,异常日志还各不相同,像如下

1)、Self referencing loop detected for property 'Task' with type 'System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1+AsyncStateMachineBox`1[MLCDZ.Common.Entity.LayPagedDto`1

2)、An unhandled exception was thrown by the application.

原因,程序里面同时使用了同步和异步,全部改为异步就可以了

8、设置默认语言

  在EF层 DefaultSettingsCreator的  Create()中设置,其中,DefaultLanguageName 的值为 "zh-Hans",

 我在设置后,一切正常,也可以切换,但是中间在将菜单修改为从数据库动态提取后,发现不能切换语言了,最终找到的原因是修改了Startup的Configure方法中  app.UseAbp()的位置, app.UseAbp()为 ABP 框架的初始化方法,当时测试的时候没有问题 ,但是后面测试其他方法是发现了各种诡异的错误 估计都跟它移动了位置有关。

另一个网友的解决方法如下,具体的,我并没有尝试

 9.程序在本地运行正常,发布到服务器后报错,Error: Failed to start the connection: Error: Unable to initialize any of the available transports.并且每个页面都有这个错误,这个问题耽误了我一天的时间,因为网上搜不到类似的错误提示,最后到github去提问,老外说因为我的服务器不支持websocket,最后到服务器添加角色一看,果然没有装,装上,重启,搞定了

 

 2019-10-16:

今天遇到的两个坑有点大,幸好有网友帮忙,我记下来希望能帮到更多的新手

1、去除用户的电子邮件必填验证
2、api发布后,swagger正确,调试postman工具不能正确访问(明天更新)

3、为什么apb的API 明明声明为post调用,却只能用get才能调用成功,用post调用参数为空

答案:

1、去除用户的电子邮件必填验证

参考网站:https://blog.csdn.net/weixin_34326558/article/details/89622629 但是不全,没有成功

我的模型,其他的大家跟着各个网站的改,反正我没有成功

        /// <summary>
        /// 邮箱
        /// </summary>
        [Email]
        [Required(AllowEmptyStrings = true)]
        [StringLength(256)]
        public override string EmailAddress { get; set; }

  最后,在EF的Context中加了这句,成功了

modelBuilder.Entity<User>().Property(a => a.EmailAddress).IsRequired(false); 

2、api发布后,swagger正确,调试工具不能正确访问,注意我圈住的地方

 

如果是请求数据,需要token 注意token的位置

 3、为什么apb的API 明明声明为post调用,却只能用get才能调用成功,用post调用参数为空

这个直接上聊天截图

 此贴太长了,后面的坑重新开贴,欢迎高手来交流

原文地址:https://www.cnblogs.com/bamboo-zhang/p/11068257.html