/// <summary> /// 设置输入参数的绑定方式 /// </summary> /// <param name="sqlApi"></param> /// <param name="actionBuilderInfo"></param> protected virtual void SetBindFrom(IConfigurationSection sqlApi, ActionBuilderInfo actionBuilderInfo) { //[FromQuery] - 从查询字符串中获取值。 //[FromRoute] - 从路由数据中获取值。 //[FromForm] - 从发布的表单域中获取值。 //[FromBody] - 从请求正文中获取值。 //[FromHeader] - 从 HTTP 标头中获取值。 if (sqlApi.Key.StartsWith("update", StringComparison.OrdinalIgnoreCase) || sqlApi.Key.StartsWith("create", StringComparison.OrdinalIgnoreCase) || sqlApi.Key.StartsWith("put", StringComparison.OrdinalIgnoreCase) || sqlApi.Key.StartsWith("post", StringComparison.OrdinalIgnoreCase)) { actionBuilderInfo.ActionInputInfo.BindFrom = "[FromBody]"; } }
/// <summary> /// 从配置中获取或重写输出参数 /// </summary> /// <param name="sqlApi"></param> /// <param name="actionBuilderInfo"></param> protected virtual void SetActionOutputFieldInfosFromConfig(IConfigurationSection sqlApi, ActionBuilderInfo actionBuilderInfo) { if (sqlApi.GetSection("Output:Parameter").Exists()) { foreach (var par in sqlApi.GetSection("Output:Parameter").GetChildren()) { var name = par["Name"]; if (string.IsNullOrWhiteSpace(name)) { continue; } var type = par["Type"]; var defaultValue = par["DefaultValue"]; var allowNullable = par["AllowNullable"]; var actionFieldInfo = actionBuilderInfo.ActionOutputInfo.ActionFieldInfos.FirstOrDefault(p => p.Name == name); if (actionFieldInfo == null) { actionFieldInfo = new ActionFieldInfo() { Name = name }; actionBuilderInfo.ActionOutputInfo.ActionFieldInfos.Add(actionFieldInfo); } if (!string.IsNullOrWhiteSpace(type)) { actionFieldInfo.TypeName = type; } if (!string.IsNullOrWhiteSpace(allowNullable)) { actionFieldInfo.AllowNullable = Convert.ToBoolean(allowNullable); } if (!string.IsNullOrWhiteSpace(defaultValue)) { actionFieldInfo.DefaultValue = defaultValue; } } } }
/// <summary> /// 从SQL中提取输入参数 /// </summary> /// <param name="sqlTpl"></param> /// <param name="actionBuilderInfo"></param> protected virtual void SetActionInputFieldInfosFromSql(string sqlTpl, ActionBuilderInfo actionBuilderInfo) => actionBuilderInfo.ActionInputInfo.ActionFieldInfos = TSqlParser.GetParameters(sqlTpl).Select(p => new ActionFieldInfo() { TypeName = p.CsTypeName, Name = p.Name?.TrimStart('@') }).ToList();
/// <summary> /// 从SQL语句提取输出字段 /// </summary> /// <param name="sqlTpl"></param> /// <param name="actionBuilderInfo"></param> protected virtual void SetActionOutputFieldInfosFromSql(string sqlTpl, ActionBuilderInfo actionBuilderInfo) => actionBuilderInfo.ActionOutputInfo.ActionFieldInfos = TSqlParser.GetOutputFieldList(sqlTpl).Select(p => new ActionFieldInfo() { TypeName = p.CsTypeName, Name = p.Name, AllowNullable = p.AllowNullable, }).ToList();