CBe*_*erg 50 asp.net-core-mvc swashbuckle
我正在尝试在新的asp .net CORE/MVC 6项目中设置一个基本的swagger API文档,并从swagger UI接收500错误:
500 : http://localhost:4405/swagger/v1/swagger.json
我的启动类中包含以下代码:
using Swashbuckle.SwaggerGen;
using Swashbuckle.SwaggerGen.XmlComments;
using Swashbuckle.Application;
....
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSwaggerGen();
services.ConfigureSwaggerDocument(options =>
{
options.SingleApiVersion(new Info
{
Version = "v1",
Title = "Blog Test Api",
Description = "A test API for this blogpost"
});
});
}
Run Code Online (Sandbox Code Playgroud)
然后在Configure下:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
....
app.UseSwaggerGen();
app.UseSwaggerUi();
....
}
Run Code Online (Sandbox Code Playgroud)
当我构建并运行项目时,当我转到swagger/UI/index.html时,UI会出现,但会显示上面的500错误.当我转到swagger/v1/swagger.json链接时,控制台会给出以下500错误:
Failed to load resource: the server responded with a status of 500 (Internal Server Error)
有什么方法可以找出500的根本原因或在swagger中启用任何额外的调试来弄清楚它为什么抛出这个错误?根据我所看到的一些教程,只有我在启动时才需要基础实现.如果我能提供任何其他信息,请告诉我.
编辑:这是针对rc1,可能与目前的新netcore 1.0无关(2016年6月29日)
hso*_*sop 96
最初我也遇到了500错误.在堆栈跟踪的深处它说:System.NotSupportedException:路径'api/hotels'的无界HTTP谓词.你错过了HttpMethodAttribute吗?
原来我错过了一个api方法的HttpGet属性:
[Microsoft.AspNetCore.Mvc.HttpGet]
Run Code Online (Sandbox Code Playgroud)
Zin*_*Min 42
如果有人想知道Swagger的堆栈跟踪中的确切错误,请请求URL:
<your-app-url>/swagger/v1/swagger.json
Run Code Online (Sandbox Code Playgroud)
或者,单击swagger.json浏览器开发工具控制台中的链接:
就我而言,我缺少 API 控制器中存在的路由属性中的操作。
像这样的事情:
[Route("api/[controller]/[action]")]
Run Code Online (Sandbox Code Playgroud)
之前我有:
[Route("api/[controller]")]
Run Code Online (Sandbox Code Playgroud)
编写[Route("api/[controller]")]时会发生错误,因为 swagger 不知道如何在路由属性内不执行操作的情况下分离 API 方法。
小智 8
我今天遇到了这个问题,原因是我的控制器 API 上的一些方法丢失了 [HttpGet]:
异常(在堆栈跟踪中)向我展示了问题您还可以在 Visual Studio 的“输出”窗口中检查异常,如下所示(在我的情况下,它向我展示了):
小智 7
如果您无法加载,请查看此处并在控制台中查看 swagger.json。
Swagger 很难协调命名空间之间的差异。当构建 api 调用所需的对象时,它将通过每个定义的类进行索引。如果有两个类共享一个类名,它将无法处理 swagger.json 文件。
.Net 将正确处理但 Swagger 不会正确处理的两个类的示例。
namespace MyCompany.PaymentProcessor.DTO
{
public class Payment
{
//dto content
}
}
Run Code Online (Sandbox Code Playgroud)
和
namespace MyCompany.CbData
{
public class Payment
{
//couch base data
}
}
Run Code Online (Sandbox Code Playgroud)
.Net 会正确处理,但 swagger 无法解析。
当我的一个功能被标记为时public,我收到了此错误,但它并不意味着它是可以直接调用的Web服务。
更改功能以private消除错误。
另外,在public函数之前,您可以放置[NonAction]命令,告诉Swagger忽略它。
[NonAction]
public async Task<IActionResult> SomeEvent(string id)
{
...
}
Run Code Online (Sandbox Code Playgroud)
(我希望Swagger实际上会报告导致此问题的函数的名称,而不是仅仅抱怨它无法找到“ ../swagger/v1/swagger.json ”文件...这并不是特别有用。 )
| 归档时间: |
|
| 查看次数: |
52216 次 |
| 最近记录: |