我们在开发中经常遇到对方的接口请求有频率限制,比如当前接口每秒的请求不能大于100,不能大于1000,对于这样的,我们作为请求方,如何做限定?
--------------------------------------------------------------------------------------------------------------
PasteForm的升级版PasteApeart,享受极致简洁的框架的魅力,点击查看文档
--------------------------------------------------------------------------------------------------------------
在开发后台管理系统时,经常会遇到多对多关系的绑定操作,比如角色与权限的绑定、用户与角色的绑定等。PasteApeart提供了一套优雅的解决方案,让我们能够快速实现这类功能。本文将以角色绑定权限为例,详细介绍整个实现流程。
首先,我们需要三个基础表:
在 GradeInfoListDto 中添加一个菜单字段,用于触发绑定操作:
/// <summary>
/// 权限绑定入口
/// </summary>
[PasteMenu("绑定权限", "open_window('绑定权限','pasteform/index.html?path=roleInfo&model=bind&grade_id={{:=item.id}}','80%','80%')")]
[Description("权限绑定")]
public int Menu1 { get; } = 0;
这里的 open_window 函数会打开一个新窗口,URL中携带了当前角色的ID(grade_id),用于后续查询。
在 InputQueryRoleInfo 中添加接收角色ID的字段:
/// <summary>
/// 角色ID - 用于查询指定角色已拥有的权限
/// </summary>
[PasteQuery("grade_id", true)]
[PasteHidden] // 默认隐藏,仅用于查询传递
[PasteExtendBind("GradeRole", "RoleId", "GradeId", "grade_id")]
[Description("角色ID")]
public int GradeId { get; set; }
关键属性说明:
PasteQuery:标记该字段为查询参数PasteHidden:在界面中隐藏该字段PasteExtendBind:配置扩展绑定的关联关系在 RoleInfoListDto 中添加绑定状态字段:
/// <summary>
/// 扩展绑定 - 标记该权限是否已被当前角色拥有
/// </summary>
[PasteSwitch("bind")]
[PasteHidden("bind")]
[PasteExtendBind("GradeRole", "RoleId", "GradeId", "grade_id")]
[Description("是否已绑定")]
public bool ExtendBind { get; set; }
PasteSwitch 属性会在界面上生成一个开关控件,用户可以通过它来切换绑定状态。
grade_id 参数InputQueryRoleInfo 中的 GradeId 字段接收到该参数grade_id 到 GradeRole 表中查找该角色已拥有的权限ExtendBind 字段会自动根据查询结果设置为 true(已绑定)或 false(未绑定)DefaultAppService 中的 updateState 方法会自动处理绑定状态的变更:
false 变为 true 时,向 GradeRole 表插入一条关联记录true 变为 false 时,从 GradeRole 表中删除对应的关联记录public class GradeInfoListDto
{
public int Id { get; set; }
public string GradeName { get; set; }
/// <summary>
/// 权限绑定入口
/// </summary>
[PasteMenu("绑定权限", "open_window('绑定权限','pasteform/index.html?path=roleInfo&model=bind&grade_id={{:=item.id}}','80%','80%')")]
[Description("权限绑定")]
public int Menu1 { get; } = 0;
}
public class InputQueryRoleInfo
{
/// <summary>
/// 角色ID - 用于查询角色已拥有的权限
/// </summary>
[PasteQuery("grade_id", true)]
[PasteHidden]
[PasteExtendBind("GradeRole", "RoleId", "GradeId", "grade_id")]
[Description("角色ID")]
public int GradeId { get; set; }
}
public class RoleInfoListDto
{
public int Id { get; set; }
public string RoleName { get; set; }
public string PermissionCode { get; set; }
/// <summary>
/// 扩展绑定 - 当前角色是否拥有此权限
/// </summary>
[PasteSwitch("bind")]
[PasteHidden("bind")]
[PasteExtendBind("GradeRole", "RoleId", "GradeId", "grade_id")]
[Description("是否已绑定")]
public bool ExtendBind { get; set; }
}
通过PasteApeart的扩展绑定功能,我们只需要简单的几步配置,就能实现复杂的多对多关系绑定操作。这种方式不仅代码量少,而且功能完善,大大提高了开发效率。其核心优势在于:
念之森蓝
不用选,后面都是PasteApeart,他们其实是一个东西
看版本,PasteApeart.Helper 26.9.2之后,就按照基类前面的顺序了,也符合阅读顺序,当然你可以使用PasteSort再次改变他!
1.语言吧,这本身只是一个开发思想,其实其他语言也可以用,不过最优雅实现的还是.NET
2.特别适用于需要表单,表格的系统,所以哪些EMS,CRM,ERP等都合适
3.扩展,比如这个思想,你也可以应用于C/S,理论上也是可以的
4.这个主要针对的是管理端,附带UI的CRUD,也就是说对于业务代码,是没影响的!
5.可能入门会麻烦点,毕竟有接近100个PasteXXXX特性要了解,幸运的是都是Paste开头,官方的也支持,比如MaxLength,Required等!