我希望能够注册某些考虑到资源实际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,在这种情况下,Swagger想在这里与它的端点对话:
http://localhost:5000/swagger/v1/swagger.json
在生产或阶段环境中,Web API将作为Web应用程序托管在IIS中的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
(Startup.Configure()
中的UseSwaggerUI()
)。
-S
该方法的文档表明,路径可以是完全限定的,也可以是相对于页面的。
在我的情况下,只删除路径的第一部分就足够了:
c.SwaggerEndpoint("v1/swagger.json", "API documentation");