2017-02-10 34 views
3

我希望能夠註冊某些URL,考慮到資源的實際URL。具體來說:我的Web API文檔的Swagger端點。ASP.NET Core在啓動時解析url?

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,在這種情況下,揚鞭想跟其端點位置:

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實例。

我很遺憾,在這種情況下如何正確實例化UrlHelperUseSwaggerUI()Startup.Configure())。

-S

回答

0

該方法的文檔說明路徑可以是完全限定的或相對於頁面。

在我而言,這是不夠的,只是刪除該路徑的第一部分:

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

這一工程樣的。除去領先的「/ 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'加載 - 它本質上擴展了GUI **文件名**與相對url而不是**文件夾** –

+0

@SigurdGarshol我看到..我通常只是去'/ swagger',不要直接去'/ swagger/index .html「,但如果它在某些時候不起作用,那絕對不是理想的。你也可以爲網站的根目錄添加一個配置值,並在配置swagger時通過它。 – markt

+0

也許這只是我們現在使用的swagger版本,但/ swagger會自動重定向到/swagger/index.html。所以我們沒有解決方法。 :( –