无法在Swagger中注入JavaScript

imzjd6km  于 8个月前  发布在  Java
关注(0)|答案(3)|浏览(112)

我得到一个404的JavaScript文件,我试图注入我的 Swagger 。以下是我的swagger配置

var thisAssembly = typeof(SwaggerConfig).Assembly;

GlobalConfiguration.Configuration 
    .EnableSwagger(c =>
        {
            c.SingleApiVersion("v1", "A title for your API");
        })
    .EnableSwaggerUi(c =>
        {
            c.InjectJavaScript(thisAssembly,"MyApi.Api.SwaggerExtensions.inject.js");   
        });

对于inject.js,构建操作被设置为嵌入式资源,逻辑路径是正确的,因为我的项目名称是MyApi.Api,文件位于项目中名为SwaggerExtensions的文件夹中

piv4azn7

piv4azn71#

当使用自定义资源时,资源名称应该包含项目的默认命名空间,如下所述。在您的情况下,配置应该是:

c.InjectJavaScript(thisAssembly, "AcctMgmt.SwaggerExtensions.inject.js")
2fjabf4q

2fjabf4q2#

我花了很多时间试图弄清楚一个同名的方法有不同的行为。Startup.Configure中的配置需要来自wwwroot的相对路径:

public void Configure(IApplicationBuilder app) {
    //
    app.UseSwagger();
    app.UseSwaggerUI(c => {
        c.SwaggerEndpoint("/swagger/v1/swagger.json", "Salon API v1");
        c.InjectJavascript("/SwaggerExtension.js");
    });
}

Get started with Swashbuckle and ASP.NET Core

pepwfjgg

pepwfjgg3#

在.NET 6上也有同样的问题。
解决方案是在WebApi项目中包含一个wwwroot文件夹,并将所有自定义文件添加到该文件夹中。Swagger配置的其余部分非常简单。
自定义文件目录:wwwroot/OpenApi/CustomScript.js
Swagger配置:

app.UseSwaggerUI(c =>
{
    c.RoutePrefix = "swagger";
    c.InjectJavascript("/OpenApi/CustomScript.js");
});

不要忘记启用UseStaticFiles中间件。
对于这些自定义文件的Build action,它似乎可以使用两个选项:NoneEmbedded resource
希望这能帮助任何有同样问题的人。
P.S.我知道添加一个wwwroot文件夹似乎是多余的,我同意。如果有人找到办法,告诉我。

相关问题