Dmi*_*riy 13 c# rest asp.net-web-api swagger swashbuckle
所有.我正在尝试使用Swashbuckle包记录WebApi 2.
如果API单独运行,那么一切都很好用,即localhost/api/swagger将我带到ui和localhost/api/swagger/docs/v1到json.
然而,producation应用程序通过从另一个现在的web项目(主应用程序之一)中的global.asax.cs运行此项目的webapiconfig方法来初始化这个相同的Webapi项目.所以api url看起来像localhost/web/api而不是localhost/api.
现在swashbuckle根本就不起作用了.
我试着到处寻找,但我找到的只是解决方法.
c.RootUrl(req => req.RequestUri.GetLeftPart(UriPartial.Authority) + VirtualPathUtility.ToAbsolute("~/").TrimEnd('/'));
Run Code Online (Sandbox Code Playgroud)
不幸的是它不起作用,现在也许它应该,我只需要改变一些东西,但我甚至不知道这个属性到底是什么以及应该设置什么.
可能它甚至不适用 - 也许设置我们需要其他东西或一些swashbuckle代码更改.
我将非常感谢您提供的任何帮助.我真的开始喜欢招摇(和swashbuckle)休息文档.
Ant*_*ace 16
对于Swashbuckle 5.x:
这似乎是由名为EnableSwagger的httpConfiguration扩展方法设置的.Swashbuckle 5.x 迁移自述文件指出这取代了SwaggerSpecConfig.SwaggerDocConfig RootUrl()专门从4.x替换ResolveBasePathUsing().
这实际上与之前的工作原理相同,看起来最大的变化是它被重命名并移入SwaggerDocConfig:
public void RootUrl(Func<HttpRequestMessage, string> rootUrlResolver)
Run Code Online (Sandbox Code Playgroud)
自述文件中的一个例子,为简洁起见进行了调整:
string myCustomBasePath = @"http://mycustombasepath.com";
httpConfiguration
.EnableSwagger(c =>
{
c.RootUrl(req => myCustomBasePath);
// The rest of your additional metadata goes here
});
Run Code Online (Sandbox Code Playgroud)
对于Swashbuckle 4.x:
使用SwaggerSpecConfig ResolveBasePathUsing并让lambda读取您的已知端点.
ResolveBasePathUsing:
public SwaggerSpecConfig ResolveBasePathUsing(Func<HttpRequestMessage, string> basePathResolver);
Run Code Online (Sandbox Code Playgroud)
我的API支持负载均衡器,这是提供基址的有用解决方法.这是一个使用ResolveBasePathUsing来解析具有已知基本路径的路径的愚蠢示例.
string myCustomBasePath = @"http://mycustombasepath.com";
SwaggerSpecConfig.Customize(c =>
{
c.ResolveBasePathUsing((req) => myCustomBasePath);
}
Run Code Online (Sandbox Code Playgroud)
为了清晰起见,我对端点进行了硬编码,但您可以在任何地方进行定义.你甚至可以使用请求对象来尝试清理你的请求uri指向/ web/api而不是/ api.
开发人员去年在GitHub 上对此解决方案发表了评论:
lambda采用当前的HttpRequest(即给定Swagger ApiDeclaration的请求),并返回一个字符串,用作Api的baseUrl.对于负载均衡的应用程序,这应该返回负载平衡器路径.
默认实现如下:
Run Code Online (Sandbox Code Playgroud)(req) => req.RequestUri.GetLeftPart(UriPartial.Authority) + req.GetConfiguration().VirtualPathRoot.TrimEnd('/');...
相对路径,Swagger规范需要绝对路径,因为提供Swagger的URL不必是实际API的URL.
...
lambda传递了一个HttpRequestMessage实例......你应该可以使用它来获取RequestUri等.另一个选项,你可以将主机名放在web.config中并让lambda从那里读取它.
| 归档时间: |
|
| 查看次数: |
26701 次 |
| 最近记录: |