/// <summary> /// 配置应用模型信息 /// </summary> /// <param name="application">引用模型</param> public void Apply(ApplicationModel application) { var controllers = application.Controllers.Where(u => Penetrates.IsApiController(u.ControllerType)); foreach (var controller in controllers) { var controllerType = controller.ControllerType; // 判断是否处理 Mvc控制器 if (typeof(ControllerBase).IsAssignableFrom(controller.ControllerType)) { if (!_dynamicApiControllerSettings.SupportedMvcController.Value || controller.ApiExplorer?.IsVisible == false) { // 控制器默认处理规范化结果 if (UnifyContext.EnabledUnifyHandler) { foreach (var action in controller.Actions) { // 配置动作方法规范化特性 ConfigureActionUnifyResultAttribute(action); } } continue; } } var controllerApiDescriptionSettings = controllerType.IsDefined(typeof(ApiDescriptionSettingsAttribute), true) ? controllerType.GetCustomAttribute <ApiDescriptionSettingsAttribute>(true) : default; ConfigureController(controller, controllerApiDescriptionSettings); } }
/// <summary> /// 配置动作方法名称 /// </summary> /// <param name="action">动作方法模型</param> /// <param name="apiDescriptionSettings">接口描述配置</param> /// <param name="controllerApiDescriptionSettings"></param> private void ConfigureActionName(ActionModel action, ApiDescriptionSettingsAttribute apiDescriptionSettings, ApiDescriptionSettingsAttribute controllerApiDescriptionSettings) { action.ActionName = ConfigureControllerAndActionName(apiDescriptionSettings, action.ActionName, _dynamicApiControllerSettings.AbandonActionAffixes, (tempName) => { // 处理动作方法名称谓词 if (!CheckIsKeepVerb(apiDescriptionSettings, controllerApiDescriptionSettings)) { var words = Penetrates.SplitCamelCase(tempName); var verbKey = words.First().ToLower(); // 处理类似 getlist,getall 多个单词 if (words.Length > 1 && Penetrates.VerbToHttpMethods.ContainsKey((words[0] + words[1]).ToLower())) { tempName = tempName[(words[0] + words[1]).Length..]; }
/// <summary> /// 配置应用模型信息 /// </summary> /// <param name="application">引用模型</param> public void Apply(ApplicationModel application) { var controllers = application.Controllers.Where(u => Penetrates.IsApiController(u.ControllerType)); foreach (var controller in controllers) { var controllerType = controller.ControllerType; // 判断是否处理 Mvc控制器 if (typeof(ControllerBase).IsAssignableFrom(controller.ControllerType)) { if (!_dynamicApiControllerSettings.SupportedMvcController.Value || controller.ApiExplorer?.IsVisible == false) { continue; } } var controllerApiDescriptionSettings = controllerType.IsDefined(typeof(ApiDescriptionSettingsAttribute), true) ? controllerType.GetCustomAttribute <ApiDescriptionSettingsAttribute>(true) : default; ConfigureController(controller, controllerApiDescriptionSettings); } }
/// <summary> /// 扫描控制器 /// </summary> /// <param name="typeInfo">类型</param> /// <returns>bool</returns> protected override bool IsController(TypeInfo typeInfo) { return(Penetrates.IsApiController(typeInfo)); }