Admin.Core/src/platform/ZhonTai.DynamicApi/DynamicApiServiceExtensions.cs

(开头部分) 5KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;
using System.Collections.Generic;
using System.Reflection;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Abstractions;
using Microsoft.AspNetCore.Mvc.ApplicationParts;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using ZhonTai.DynamicApi.Helpers;

namespace ZhonTai.DynamicApi;

/// <summary>
/// Add Dynamic WebApi
/// </summary>
public static class DynamicApiServiceExtensions
{
    /// <summary>
    /// Use Dynamic WebApi to Configure
    /// </summary>
    /// <param name="application"></param>
    /// <param name="optionsAction"></param>
    /// <returns></returns>
    public static IApplicationBuilder UseDynamicApi(this IApplicationBuilder application, Action<IServiceProvider,DynamicApiOptions> optionsAction)
    {
        var options = new DynamicApiOptions();

        optionsAction?.Invoke(application.ApplicationServices,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;
        AppConsts.NamingConvention = options.NamingConvention;
        AppConsts.GetRestFulControllerName = options.GetRestFulControllerName;
        AppConsts.GetRestFulActionName = options.GetRestFulActionName;
        AppConsts.AssemblyDynamicApiOptions = options.AssemblyDynamicApiOptions;

        var partManager = application.ApplicationServices.GetRequiredService<ApplicationPartManager>();

        // Add a custom controller checker
        var featureProviders = application.ApplicationServices.GetRequiredService<DynamicApiControllerFeatureProvider>();
        partManager.FeatureProviders.Add(featureProviders);

        foreach(var assembly in options.AssemblyDynamicApiOptions.Keys)
        {
            var partFactory = ApplicationPartFactory.GetApplicationPartFactory(assembly);

            foreach(var part in partFactory.GetApplicationParts(assembly))
            {
                partManager.ApplicationParts.Add(part);
            }
        }


后面还有 81 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。