使用.net Core 2 API实现Swashbuckle/Swagger我现在在访问swagger.json时收到500错误:不支持异常:操作的HTTP方法不明确- EBisAPI.Controllers._class.HandleError(EBisAPI)。操作需要Swagger的显式HttpMethod绑定我已经检查了所有的控制器,并在每个控制器的所有公共方法上看到了显式路由。有没有一种方法可以确定哪个方法抛出了不明确的路由错误?
33qvvth11#
当一个方法在控制器中被声明为public,但没有REST属性时,可能会发生这种情况。将方法更改为protected可以解决这个问题。我以前见过这种错误,通常错误消息指向罪魁祸首:EBisAPI.Controllers._class.HandleError我猜HandleError是你的基类中的一个public方法,对吧?把它改成protected,然后再试一次。这当然只是一种可能的解决方案。如果错误消息中提到的方法是接口实现的一部分,那么它就不起作用,您需要考虑其他解决方案之一。
EBisAPI.Controllers._class.HandleError
HandleError
public
protected
kkbh8khc2#
和totonho的答案相似你可以用
[ApiExplorerSettings(IgnoreApi=true)]
(From https://github.com/domaindrivendev/Swashbuckle/issues/153)
nsc4cvqm3#
干净的方法可以使用数据注解[NonAction]来将方法设置为受保护。
[NonAction]
brjng4g34#
我通过用正确的HTTP属性修饰错误中提到的方法来解决这个错误。例如:[HTTP获取]此代码抛出错误:
public object Get() { MongoDbContext dbContext = new MongoDbContext(); return new { API = true, Database = dbContext.Status() }; }
此代码适用于:
[HttpGet] public object Get() { MongoDbContext dbContext = new MongoDbContext(); return new { API = true, Database = dbContext.Status() }; }
5ktev3wc5#
正如我在“Swashbuckle不创建swagger.json文件”中提到的:1.使用显式的Http方法装饰所有操作,如[HttpGet("xxx")],[HttpPost("xxx")]或...,而不是[Route("xxx")]。1.使用[NonAction]属性装饰控制器中的公共方法。
[HttpGet("xxx")]
[HttpPost("xxx")]
[Route("xxx")]
xqkwcwgp6#
我尝试了不同的解决方案,但对我来说最有效的是在属性中添加路由,如上所述。即:[HttpPost("yourRoute/create")]其中一个问题是我有两个get方法,所以我改变了它们的名字,并像我说的那样将路由添加到属性中。
[HttpPost("yourRoute/create")]
quhf5bfb7#
我也遇到了同样的问题,这是因为我重写了Ok()方法,返回了一个OkObjectResult。
mbjcgjjk8#
我也遇到了同样的问题。对我来说,错误是默认情况下WeatherForecastController或任何其他类继承自ControllerBase类。但当我创建一个新类时,它继承自Controller类。所以ControllerBase和Controller类之间的冲突导致了这个问题。然后从ControllerBase类继承新的Controller为我修复了这个问题。不能同时从ControllerBase和Controller继承。
WeatherForecastController
ControllerBase
Controller
8条答案
按热度按时间33qvvth11#
当一个方法在控制器中被声明为public,但没有REST属性时,可能会发生这种情况。将方法更改为protected可以解决这个问题。
我以前见过这种错误,通常错误消息指向罪魁祸首:
EBisAPI.Controllers._class.HandleError
我猜
HandleError
是你的基类中的一个public
方法,对吧?把它改成protected
,然后再试一次。这当然只是一种可能的解决方案。如果错误消息中提到的方法是接口实现的一部分,那么它就不起作用,您需要考虑其他解决方案之一。
kkbh8khc2#
和totonho的答案相似你可以用
(From https://github.com/domaindrivendev/Swashbuckle/issues/153)
nsc4cvqm3#
干净的方法可以使用数据注解
[NonAction]
来将方法设置为受保护。brjng4g34#
我通过用正确的HTTP属性修饰错误中提到的方法来解决这个错误。例如:[HTTP获取]
此代码抛出错误:
此代码适用于:
5ktev3wc5#
正如我在“Swashbuckle不创建swagger.json文件”中提到的:
1.使用显式的Http方法装饰所有操作,如
[HttpGet("xxx")]
,[HttpPost("xxx")]
或...,而不是[Route("xxx")]
。1.使用
[NonAction]
属性装饰控制器中的公共方法。xqkwcwgp6#
我尝试了不同的解决方案,但对我来说最有效的是在属性中添加路由,如上所述。即:
[HttpPost("yourRoute/create")]
其中一个问题是我有两个get方法,所以我改变了它们的名字,并像我说的那样将路由添加到属性中。quhf5bfb7#
我也遇到了同样的问题,这是因为我重写了Ok()方法,返回了一个OkObjectResult。
mbjcgjjk8#
我也遇到了同样的问题。对我来说,错误是默认情况下
WeatherForecastController
或任何其他类继承自ControllerBase
类。但当我创建一个新类时,它继承自Controller
类。所以
ControllerBase
和Controller
类之间的冲突导致了这个问题。然后从
ControllerBase
类继承新的Controller为我修复了这个问题。不能同时从
ControllerBase
和Controller
继承。