ASP.NET Core 在启动时解析 url?
Posted
技术标签:
【中文标题】ASP.NET Core 在启动时解析 url?【英文标题】:ASP.NET Core resolve url in startup? 【发布时间】:2017-06-28 13:17:57 【问题描述】:我希望能够注册某些考虑到资源实际 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 将作为 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
【问题讨论】:
【参考方案1】:该方法的文档说路径可以是完全限定的或相对于页面。
就我而言,只需删除路径的第一部分就足够了:
c.SwaggerEndpoint("v1/swagger.json", "API documentation");
【讨论】:
那行得通,有点。删除前导的“/swagger”和“/TheGreatestAPI/swagger”实际上确实导致定义端点分别位于https://localhost:5000/swagger/v1/swagger.json
和https://test.contoso.com/TheGreatestWebAPI/swagger/v1/swagger.json
。但是,https://localhost:5000/swagger/index.html
的标准 Swagger GUI 页面尝试从 https://localhost:5001/swagger/index.html/v1/swagger.json
加载 - 它实质上使用相对 url 而不是 文件夹跨度>
@SigurdGarshol 我明白了。我通常只去/swagger
,而不直接去/swagger/index.html
,但如果它有时不起作用,那肯定不是理想的。您也可以只为站点的根目录添加一个配置值,然后在配置 swagger 时将其传入。
可能只是我们现在使用的swagger版本,但是/swagger会自动重定向到/swagger/index.html。因此,我们没有解决方法。 :(以上是关于ASP.NET Core 在启动时解析 url?的主要内容,如果未能解决你的问题,请参考以下文章
Asp.Net Core 2.1 Identity - UserStore 依赖注入