我们在开发中经常遇到对方的接口请求有频率限制,比如当前接口每秒的请求不能大于100,不能大于1000,对于这样的,我们作为请求方,如何做限定?

如上图,可以看到权限类型,有不一样的颜色!
首先你的dll的版本应该
<PackageReference Include="PasteForm.Helper" Version="26.1.15" />
我们都知道,有些数据用枚举比较好实现
/// <summary>
/// 一些状态的枚举
/// </summary>
[Description("状态枚举")]
public enum EnumStateQuery
{
/// <summary>
/// 一般用于查询,表示忽略,直接查询所有
/// </summary>
[Description("查询")]
all = -1,
/// <summary>
/// 一般表示禁用,不可用
/// </summary>
[Description("禁用")]
fail = 0,
/// <summary>
/// 一般表示正常
/// </summary>
[Description("正常")]
ok = 1,
/// <summary>
/// 一般表示取消
/// </summary>
[Description("取消")]
cannel = 2,
/// <summary>
/// 一般表示删除
/// </summary>
[Description("删除")]
deleted = 4
}
/// <summary>
/// 权限类型
/// </summary>
[Description("权限类型")]
public enum EnumRoleType
{
/// <summary>
/// 全部
/// </summary>
[Description("全部")]
All = -1,
/// <summary>
/// <![CDATA[<i_*_style="color:green;">权限</i>]]>
/// </summary>
[Description("权限")]
Role = 0,
/// <summary>
/// 菜单
/// </summary>
[Description("<span_*_style=\"background:#f3f3f3;color:blue;\">菜单</span>")]
Menu = 1,
/// <summary>
/// 权限
/// </summary>
[Description("<span_*_style=\"color:red;\">按钮</span>")]
Button = 2,
/// <summary>
/// 小程序菜单
/// </summary>
[Description("小程序菜单")]
MiniMenu = 3
}
/// <summary>
/// 读取ListDto的数据模型
/// </summary>
/// <returns></returns>
[HttpGet]
[TypeFilter(typeof(RoleAttribute), Arguments = new object[] { "data", "view" })]
public async Task<VoloModelInfo> ReadListModel()
{
var _model = BuilderHelper.AttributeReadModelProperty<RoleInfoListDto>(new RoleInfoListDto());
var isRoot = await base.IsRootAsync();
if (!isRoot)
{
if (_model.Properties != null)
{
_model.Properties.RemoveAll(x => x.Name == "button");
}
}
var _query_model = BuilderHelper.DynamicReadModelProperty(new InputQueryRoleInfo());
if (_query_model != null)
{
_model.QueryProperties = _query_model.Properties;
}
return _model;
}
看上面代码,我用了2个接口读取Dto的元数据
我们都知道注释的规则是使用空格隔开的,
所以如果你要输出空格,得用*替代!
注释共有几种格式
1.直接留空,这样Form得时候,就直接显示内容了,这个在[PasteSumform]中常搭配使用
2.就单个,表示只有名称,没有注释
3.双段,用空格隔开,表示第一段是名称,第二段是注释
4.三段,其实第一段和第二段有用之外,第三段对于前端来说没用了,第三段得内容主要是给后端开发用得,也就是你鼠标放字段上得时候,提示得注释,是不是很灵活!
如果这个枚举,我要前端也就是管理端来控制样式要如何做?
试试class和[PasteHtml]配合使用!元数据只返回枚举得值,然后[PasteHtml]返回特定样式
/// <summary>
/// 类型
/// </summary>
[Description("类型")]
[PasteHtml("<span class=\"rclass rtype{{:=item.role_val}}\">{{:=item.roleType}}</span>")]
public EnumRoleType RoleType { get; set; }
/// <summary>
///
/// </summary>
[PasteHidden]
public int role_val { get { return (int)RoleType; } }
注意
RoleType返回前端,我默认是小写开头得,也就是roleType,由于他是枚举类型,在UI中会转化成名称(权限),而不是值(2)
所以需要用另外一个字段role_val进行转化
然后PasteHtml中,用到了2个宏!
{{:=item.role_val}}
其中{{:=}}这个是宏的格式,item是为了和表格的行数据匹配,所以form中也用这个表示当前对象,至于role_val就是对应的字段了!
在特定的情况下这个item也表示url中的query!!!
贴代码
应该和之前的PasteForm引入有关,之前的版本引入了大量的API,看看10月份或者11月份的版本,新版本的PasteForm极大的优化了API接口量,可以说直接从4N优化到了N个(N代表数据表数量)
已经升级了,主要是left join的查询的时候没有过滤,其实这个问题,多租户也是一样的!