c# – Web API:使用不同HTTP谓词的相同方法
在WEB API控制器中,我们可以使用不同的HTTP谓词具有相同的方法名称吗?
[HttpGet] public string Test() { return "Success Get"; } [HttpPost] public string Test(int i) { return "Success Post"; } Swagger不接受此配置.访问API方法时出现此错误:
这是我的routeconfig: config.Routes.MapHttpRoute( name: "DefaultApiByName",routeTemplate: "api/{controller}/{action}/{name}",defaults: new { id = RouteParameter.Optional } ); config.Routes.MapHttpRoute( name: "DefaultApiByAction",routeTemplate: "api/{controller}/{action}" ); config.Routes.MapHttpRoute("DefaultApi","api/{controller}/{id}",new { id=RouteParameter.Optional}); 解决方法
路线名称本身与Swagger无关.当Swagger检测到可能有歧义的路线时,它会因此错误而爆炸.模糊路由是单个路由(基本uri),返回多于一种类型的资源.出于某些疯狂的原因,Microsoft Web Api允许您为同一URI返回不同的资源,这是您在尝试使用API??(和Swagger)时遇到麻烦的地方.
单个URI应代表单个资源. > GET / apples //返回一个苹果列表 方式不正确: > GET / apples / //返回一个苹果列表 Microsoft Web Api允许您使用多种方法处理单个路由,因此您会非常严重地意外创建模糊路由. 打破Swagger的代码示例: [HttpGet,Route("apples")] public HttpResponseMessage GetApples() { return _productRepository.Get(id); } [HttpGet,Route("apples")] pblic HttpResponseMessage GetApples([FromUri]string foo) { return new DumpTruck(); // Say WHAAAAAAT?! } 许多Swagger框架在运行时扫描您的代码并创建Swagger 2.0 JSON文档. Swagger UI请求JSON文档并构建您基于该文档看到的UI. 以下是一些可以帮助解决此问题的方法: >确保使用单一资源类型表示单个路由(基本URI). [ApiExplorerSettings(IgnoreApi = true)] 这将告诉文档在记录API和Swagger将呈现时完全忽略此方法.请记住,如果您使用#2,那么Swagger将不会呈现此方法,这可能会导致消费API的人出现问题. 希望这可以帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |