ABP .NET Core
文章平均质量分 80
ABP .NET Core
Johan.
关注前沿技术,并致力于开源社区与微软平台的组合优化;有多年大数据高并发实践经验、对精简代码并行程序开发、代码美感以及程序员能力修养等相关问题也有着浓厚的兴趣;
展开
-
.NET ABP.Zero 项目疑似内存排查历程
当前项目是 .NET 5 EentityFrameworkCore,疑似内存泄漏,之所以说是疑似是因为到目前位置还没有能准确的定位到问题。当前这个框架从 .NET Core 2.1 就开始用,期间有升级到 3.1、5.0、6.0,在排查过程中还把 5.0 分支升级到了 7.0。不幸的是这些分支都存在疑似泄漏的现象。原创 2023-10-09 17:43:13 · 629 阅读 · 0 评论 -
ABP 插件项目软删除不生效解决方案
ABP .NET Core 2.1 升级到 .NET 5 后遇到一个奇怪的问题。插件项目 TenantId 与 IsDeleted 没生效。删除操作执行成功,界面上数据还在。一开始以为是删除失败了,结果一看方法体就四句话,还有两句是判断,实在是没有失败的理由。下面是这段没有报错的删除方法。/// <summary>删除分类</summary>public async Task Remove(Guid id){ var entity = await _repo..原创 2021-09-29 16:14:57 · 1081 阅读 · 0 评论 -
Linq 去重简介
ABP CLI (命令行接口) 是一个命令行工具,用来执行基于ABP解决方案的一些常见操作.InstallationABP CLI 是一个dotnet global tool. 使用命令行窗口安装:dotnet tool install -g Volo.Abp.Cli更新最新版本:dotnet tool update -g Volo.Abp.CliCommands...原创 2020-03-17 17:03:42 · 10063 阅读 · 0 评论 -
Chrome80调整SameSite策略对IdentityServer4的影响以及处理方案(践行篇)
首选方法:将域名升级为 HTTPS。低成本的证书申请请参建《阿里云免费 DigiCert SSL 证书申请》方法二:使用代码修改SameSite 设置如果没有域名或内网环境,可以使用该方法。源码在文末的参考文档中复制下来可以直接用。private const SameSiteMode Unspecified = (SameSiteMode)(-1);改为private const SameSiteMode Unspecified = SameSiteMode.Lax;新增Sam..原创 2020-09-10 15:41:12 · 1410 阅读 · 0 评论 -
ABP 在 EntityFramework 中使用扩展批量更新时的异常
报错信息:Invalid Cast. The update expression must be of type MemberInitExpression.直译结果:无效的。更新表达式必须是MemberInitExpression类型。下面是报错对应的写法:await projectsRepository.BatchUpdateAsync(x => new Projects(2...原创 2020-06-16 11:01:08 · 1506 阅读 · 1 评论 -
入门系列-依赖注入
依赖注入ABP的依赖注入系统是基于Microsoft的依赖注入扩展库(Microsoft.Extensions.DependencyInjection nuget包)开发的.因此,它的文档在ABP中也是有效的.模块化由于ABP是一个模块化框架,因此每个模块都定义它自己的服务并在它自己的单独模块类中通过依赖注入进行注册.例:public class BlogModule : Abp...原创 2019-12-05 17:35:22 · 3899 阅读 · 0 评论 -
ABP 启用多租户实现数据隔离
多租户技术(英语:multi-tenancy technology)或称多重租赁技术,是一种软件架构技术,它是在探讨与实现如何于多用户的环境下共用相同的系统或程序组件,并且仍可确保各用户间数据的隔离性。 多租户简单来说是指一个单独的实例可以为多个组织服务。多租户技术为共用的数据中心内如何以单一系统架构与服务提供多数客户端相同甚至可定制化的服务,并且仍然可以保障客户的数据隔离。一个支持多租...原创 2019-10-16 15:46:14 · 3855 阅读 · 0 评论 -
ABP JsonExtensions 内部实现源码
调用方式:str.FromJsonString<List<Guid>>();//字符串转集合list.ToJsonString();//集合转字符串using JetBrains.Annotations;using Newtonsoft.Json;using System;namespace Abp.Json{ public stati...原创 2019-07-24 15:08:56 · 4226 阅读 · 0 评论 -
解读 ABP RandomHelper 内部实现源码
ABP 源码中存在一个对随机值 Random 的封装帮助类,可以帮助用户快速获取随机数,并且该类是以单例模式封装,还可以提升复用率以及性能。下面我们来解读下 RandomHelper 类的具体实现。1.首先声明静态只读 Random (单例)private static readonly Random Rnd = new Random();2.通过传入最小最大值取随机整数,不得不佩服...原创 2019-06-26 15:09:26 · 4304 阅读 · 0 评论 -
ABP EntityFramework 切换为 PostgreSQL / MySQL 支持
1.引用 Npgsql.EntityFrameworkCore.PostgreSQL、Pomelo.EntityFrameworkCore.MySql NuGet 包至EntityFrameworkCore 项目;2.在DbContextConfigurer 类中使用builder.UseNpgsql(connectionString); 并引入Npgsql 命名空间或 builder...原创 2019-05-27 17:30:43 · 5042 阅读 · 0 评论 -
ABP 如何创建 BackgroundWorker (后台作业)
1.创建 xxxWorker 作业类,并继承Abp.Threading.BackgroundWorkers.PeriodicBackgroundWorkerBase 基类,与Abp.Dependency.ISingletonDependency 接口2.申明构造函数。注意:下面的的 Timer 是父类中的,不是构造函数上的 timer 参数。public xxxWorker(AbpT...原创 2019-05-20 14:56:53 · 5994 阅读 · 0 评论 -
ABP 继承 ISoftDelete 后调用 HardDeleteAsync 实现物理删除
如标题描述的一样,在继承ISoftDelete 后希望进行物理删除操作时,调用HardDeleteAsync 方法即可。下面是该方法的内部实现:public static async Task HardDeleteAsync<TEntity, TPrimaryKey>(this IRepository<TEntity, TPrimaryKey> repositor...原创 2019-04-27 14:44:38 · 2173 阅读 · 0 评论 -
ABP 如何查询出软删除(SoftDelete)数据
两种使用方式:UnitOfWorkManager.Current.DisableFilter(AbpDataFilters.SoftDelete);.........using (UnitOfWorkManager.Current.DisableFilter(AbpDataFilters.SoftDelete)){ ... ... ...}...原创 2019-04-26 19:44:14 · 8463 阅读 · 0 评论 -
ABP 使用 IShouldNormalize 完成缺省值初始化
在 ABP 中有一个IShouldNormalize 接口,内部只有一个方法Normalize。主要场景用于 Dtonamespace Abp.Runtime.Validation{ // // 摘要: // This interface is used to normalize inputs before method execution. /...原创 2019-04-25 19:58:57 · 4531 阅读 · 0 评论 -
ABP 动态 WebApi 隐藏接口的方法(二)
之前讨论过在AppService 中隐藏 API 的两种方式。这次再来讨论另外一种情况。新建一个类作为公共类,并且整个类都不需要解析成动态 API。这种场景就可以继承DomainService。ABP 中继承 DomainService 的类其实就是各种 xXxManager 类。例如比较常用的 UserManager、RoleManager 之类的。这样就跳出来,就不用理会动态解析...原创 2019-05-09 11:33:34 · 2985 阅读 · 0 评论 -
ABP 动态 WebApi 隐藏接口的方法(一)
在ABP实际开发过程中既有可能会遇到不希望将某些方法暴露,那么就需要想办法将接口隐藏起来。方法一:通过修改修饰符实现。例如将方法修改为 private,这种方式比较常用。但这种方式就将方法的访问范围限制在当前类。所以再来看下一个。方法二:使用 ABP 提供的RemoteServiceAttribute (命名空间:Abp.Application.Services),设置[Rem...原创 2019-04-22 19:42:15 · 4393 阅读 · 0 评论 -
ABP 自定义会话过期时间(登录过期时间)
找到一个继承AbpModule 的类,在PreInitialize() 方法中有一个ConfigureTokenAuth() 方法,上图中最后一句Expiration 就是过期时间了。注意这种方式是最便捷的,因为在TokenAuthController 类中 _configuration.Expiration 被引用了 7 次或更多,如果不从源头改则需要把每处引用都找到并修...原创 2019-04-08 10:40:29 · 8060 阅读 · 0 评论 -
ABP Linq 扩展的 WhereIf 查询内部实现
public static class QueryableExtensions{ public static IQueryable<T> WhereIf<T>(this IQueryable<T> query, bool condition, Expression<Func<T, bool>> predicate) {...原创 2019-01-08 13:54:29 · 5496 阅读 · 0 评论 -
ABP 对 Microsoft.AspNetCore.Identity 规则的封装
1.在 Core.Shared.PasswordComplexitySettingStore中定义了密码规则的 DtoSecurity.PasswordComplexitySetting.cs 该 Dto 定义了密码规则,该规则对应的就是Microsoft.AspNetCore.Identity.HashPassword 中的密码规则。2.在 Application 层 Conf...原创 2019-03-25 14:30:54 · 4713 阅读 · 0 评论 -
ABP AsyncHelper.RunSync 内部实现
using System;using System.Reflection;using System.Threading.Tasks;using Nito.AsyncEx;namespace Abp.Threading{ /// <summary> /// Provides some helper methods to work with async met...原创 2019-03-13 10:02:01 · 5398 阅读 · 0 评论 -
ABP 调用 PUT 接口报错 405 Method Not Allowed
返回结果为: <h3>HTTP 错误 405.0 - Method Not Allowed</h3> <h4>无法显示您正在查找的页面,因为使用了无效方法(HTTP 谓词)。</h4> 经过在一番搜索,发现问题出在 IIS 设置上。下面通过设置允许 PUT 请求通过:第一步:删除 IIS 中“WebDAV 发布”功能。...原创 2019-03-04 15:26:29 · 4368 阅读 · 0 评论 -
ABP 部署遇到的问题(记录)
同一个服务部署在局域网 192.168.6.19 上域名 xxx.xxx.xxx(xxx)局域网 IP 地址 192.168.6.19:8002公网 IP 地址 221.178.13.190:80测试用帐号来自租户库中新创建的 xxx 用户,密码为:123qwe id=2测试结果:1.使用域名连接服务,无法登录。(因为连到 Host 库上导致无法登录)2.使...原创 2019-01-28 11:18:50 · 4188 阅读 · 0 评论 -
ABP 扩展 UserOrganizationUnit / UserRole 等中间表
AbpUserOrganizationUnits / AbpUserRoles这两张表是 ABP 框架内的表,因为AbpUsers 用户主键现在是 long,新增了一个 Guid 类型的PrimaryId 字段后,对外就不再传递 long 类型的主键,所以就出现了修改这两张中间表的需求。下面是扩展 UserRole 的实现过程,UserOrganizationUnit 实现过程一样。1...原创 2019-07-04 18:27:37 · 3161 阅读 · 0 评论 -
ABP 扩展 OrganizationUnit 数据实体(新增字段)
OrganizationUnit 数据实体因为没有abstract,相比Role 加字段有点些不一样的地方,下面是实现步骤:1.新增OrganizationUnitExtend并继承Abp.Organizations.OrganizationUnit2.【重点】重新迁移,并修改AbpOrganizationUnits 迁移生成后的代码,修改的主要原因是设置 【Discrim...原创 2019-03-11 10:58:38 · 4094 阅读 · 0 评论 -
ABP 扩展 Role 数据实体(新增字段)
Role 数据实体 继承自 AbpRole 类,并且 AbpRole 是 abstract 类型。所以新增属性直接添加在 Role 中即可。效果如下:最后再重新执行迁移就生效了。迁移命令Add-MigrationUpdate-Database以上信息均参考ABP文档:https://docs.aspnetzero.com/documents/zero/lat...原创 2019-03-04 15:10:58 · 5502 阅读 · 0 评论 -
ABP .NET Core 通过 AbpSession 获取 UserName (二)
private static Dictionary<long?, User> dict;//保存用户信息,减少请求次数/// <summary>/// 保存登录用户信息/// </summary>/// <param name="user"></param>public void SaveUserToCache(User u...原创 2019-01-08 18:45:00 · 3019 阅读 · 0 评论 -
ABP .NET Core 通过 AbpSession 扩展获取 UserName(一)
这篇文章主要用于记录使用 ABP 过程。下面是这篇文章的主要代码,代码被放在 Core 层,因为是扩展方法所以不是必须放在 Core 层。 public static class AbpSessions { private static Dictionary<long?, AbpLoginResult<Tenant, User>> dic...原创 2018-12-12 16:44:39 · 4504 阅读 · 0 评论 -
ABP 内置 NameValue 对象
这个类的最主要作用就是节约一个类,其他没发现有什么特别的。而且像 键/值 队的这种场景也确实却在一些。using System;namespace Abp{ /// <summary> /// Can be used to store Name/Value (or Key/Value) pairs. /// </summary> ...原创 2019-08-20 19:23:23 · 5189 阅读 · 0 评论 -
ABP 中“To”方法使用解析(类型转换公共方法)
To 方法内部实现是类型转换的一个扩展方法。该方法封装精妙,可以替代曾今封装过的一组ToInt32 / ToGuid / ToDateTime 。。。该方法命名空间:using Abp.Extensions;/// <summary>/// Converts given object to a value or enum type using <see cref="...原创 2019-08-13 10:28:05 · 7025 阅读 · 0 评论 -
ABP 接口返回 An internal error occurred during your request
在 ABP 开发过程中,这个错误是必然会遇到。该错误的中文版“对不起,在处理您的请求期间,产生了一个服务器内部错误”这是系统在发生没有处理的内部错误时抛出的默认错误信息,其目的是友好的向用户展示异常信息,避免看到一堆报错懵逼。开发人员发现这样的错误时,就去分析日志来定位并解决问题。日志文件一般在 Host/logs 目录下的 *.txt 文件里。时常遇到有人问怎么将错误信息...原创 2019-09-04 16:34:52 · 9753 阅读 · 0 评论 -
深入浅出-应用程序启动模板
报错信息:Invalid Cast. The update expression must be of type MemberInitExpression.直译结果:无效的。更新表达式必须是MemberInitExpression类型。下面是报错对应的写法:await projectsRepository.BatchUpdateAsync(x => new Projects(2...原创 2019-09-18 10:42:55 · 2922 阅读 · 0 评论