示例#1
0
        /// <summary>
        /// 添加AspNet Core web api相关配置
        /// </summary>
        /// <param name="services"></param>
        /// <param name="swaggerConfigurationAction">swagger配置</param>
        /// <param name="dynamicWebApiConfigurationAction">panda.DynamicWebApi配置</param>
        /// <returns></returns>
        public static IServiceCollection AddRivenAspNetCoreSwashbuckle(this IServiceCollection services, Action <SwaggerGenOptions> swaggerConfigurationAction = null, Action <DynamicWebApiOptions> dynamicWebApiConfigurationAction = null)
        {
            // swagger
            services.AddSwaggerGen((options) =>
            {
                options.DocInclusionPredicate((docName, description) => true);

                swaggerConfigurationAction?.Invoke(options);
            });

            // DynamicWebApi
            if (dynamicWebApiConfigurationAction != null)
            {
                var dynamicWebApiOptions = new DynamicWebApiOptions();
                dynamicWebApiConfigurationAction.Invoke(dynamicWebApiOptions);

                services.AddDynamicWebApi(dynamicWebApiOptions);
            }
            else
            {
                services.AddDynamicWebApi();
            }
            return(services);
        }
        /// <summary>
        /// 添加动态 WebAPI 到容器
        /// </summary>
        /// <param name="services"></param>
        /// <param name="options">configuration</param>
        /// <returns></returns>
        public static IServiceCollection AddDynamicWebApi(this IServiceCollection services, DynamicWebApiOptions options)
        {
            if (options == null)
            {
                throw new ArgumentException(nameof(options));
            }

            options.Valid();

            AppConsts.DefaultAreaName             = options.DefaultAreaName;
            AppConsts.DefaultHttpVerb             = options.DefaultHttpVerb;
            AppConsts.DefaultApiPreFix            = options.DefaultApiPrefix;
            AppConsts.ControllerPostfixes         = options.RemoveControllerPostfixes;
            AppConsts.ActionPostfixes             = options.RemoveActionPostfixes;
            AppConsts.FormBodyBindingIgnoredTypes = options.FormBodyBindingIgnoredTypes;

            var partManager = services.TryGetSingletonInstance <ApplicationPartManager>();

            if (partManager == null)
            {
                throw new InvalidOperationException("\"AddDynamicWebApi\" 必须在 \"AddMvc\" 方法之后调用");
            }

            // Add a custom controller checker
            partManager.FeatureProviders.Add(new DynamicWebApiControllerFeatureProvider());

            services.Configure <MvcOptions>(o =>
            {
                // Register Controller Routing Information Converter
                o.Conventions.Add(new DynamicWebApiConvention(services));
            });

            return(services);
        }