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調用參數為空

這個直接上聊天截圖

 

 

 此貼太長了,后面的坑重新開貼,歡迎高手來交流


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM