ASP.NET Core在启动时解析url?

时间:2017-02-10 08:56:31

标签: asp.net-core swagger-ui urlhelper actioncontext

我希望能够注册考虑到资源的实际网址的某些网址。具体来说:我的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网络表单的人来说,这应该是熟悉的。 Page.ResolveUrl(),我可以通过UrlHelper.Content()获得相同的功能。但是,该函数需要UrlHelper类的实例,相关的构造函数需要ActionContext实例。

我不知道如何在此上下文中正确实例化UrlHelperUseSwaggerUI()中的Startup.Configure())。

-S

1 个答案:

答案 0 :(得分:0)

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

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

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