/ dotnet

在 ABP 项目中添加 SwaggerUI

什么是 SwaggerUI

SwaggerUI 是一个能将我们的webapi,通过Swagger Api来生成一个交互式的文档。通过 SwaggerUI 可以对你的接口进行调式。

步骤

引入包到项目中

通过nuget安装Swashbuckle.core

插入代码

在对应的 webapi 代码中找到对应的 ApiModule 文件,添加这个一个方法:

private void ConfigureSwaggerUi()
    {
        Configuration.Modules.AbpWebApi().HttpConfiguration.EnableSwagger(c =>
                {
                    c.SingleApiVersion("v1", "yourProject");
                    c.ResolveConflictingActions(apiDescriptions =>apiDescriptions.First());
                })
                .EnableSwaggerUi();
    }

如果要添加注释的话请加入:

private void ConfigureSwaggerUi()
    {
        var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
        var commentsFileName = "Bin//yourProject.Application.xml";
        var commentsFile = Path.Combine(baseDirectory, commentsFileName);
        Configuration.Modules.AbpWebApi().HttpConfiguration.EnableSwagger(c =>
            {
                c.SingleApiVersion("v1", "yourProject.WebApi");
                c.ResolveConflictingActions(apiDescriptions =>apiDescriptions.First());
                c.IncludeXmlComments(commentsFile);
            }).EnableSwaggerUi(c =>
                {
                    c.InjectJavaScript(Assembly.GetAssembly(typeof(EMISWebApiModule)), "AbpCompanyName.AbpProjectName.Api.Scripts.Swagger-Custom.js");
        });
    }

记得在Initialize()中调用。

运行

运行项目,打开”/swagger/ui/index”路径。

遇到的问题

新版本的 ABP 开启了一个功能Cross-Site Request Forgery(跨站请求伪造)导致直接访问SwaggerUI404

解决方法

在对应的 webapi 代码中找到对应的 ApiModule 文件,添加这个对应方法

 public override void PreInitialize()
        {
            Configuration.Modules.AbpWeb().AntiForgery.IsEnabled = false;
            base.PreInitialize();
        }

作用是关闭跨站脚本攻击。
## 参考文档
ABP教程-给项目添加SwaggerUI,生成动态webapi