3

我希望能够注册考虑到资源的实际 url 的某些 url。具体来说:我的 Web API 文档的 Swagger 端点。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseMvc();

     app.UseSwagger();
     app.UseSwaggerUi(c =>
     {
         c.SwaggerEndpoint($"/swagger/v1/swagger.json", "API documentation");
         //c.SwaggerEndpoint($"/TheGreatestWebAPI/swagger/v1/swagger.json", "API documentation");
     });
}

在我的开发环境中,我将在http://localhost:5000上托管 Web PI ,在这种情况下,Swagger 想在此处与其端点对话:

http://localhost:5000/swagger/v1/swagger.json

在生产或登台环境中,Web API 将作为 IIS 中的 Web 应用程序托管,类似这样https://test.contoso.com/TheGreatestWebAPI,swagger 会想谈这个:

https://test.contoso.com/TheGreatestWebAPI/swagger/v1/swagger.json

...因此后者被注释掉的端点注册。

我想做的是使用这样的东西:

c.SwaggerEndpoint($"~/swagger/v1/swagger.json", "API documentation");

任何使用过 ASP.NET Web 表单的人都应该熟悉这一点Page.ResolveUrl(),并且据我所知,相同的功能应该可以通过UrlHelper.Content(). 但是,该函数需要UrlHelper类的实例,而相关的构造函数需要ActionContext实例。

我不知道UrlHelper在这种情况下如何正确实例化(UseSwaggerUI()in Startup.Configure())。

-S

4

1 回答 1

0

该方法的文档说路径可以是完全限定的或相对于页面。

就我而言,只需删除路径的第一部分就足够了:

c.SwaggerEndpoint("v1/swagger.json", "API documentation");
于 2017-07-18T21:10:23.653 回答