当前位置: 首页 > 编程语言 > C#

WebAPI-Share

时间:2023-04-10 17:47:12 C#

withthesamemethodusingdifferentHTTPverbsWebAPI:SamemethodusingdifferentHTTPverbs在WEBAPIcontroller中,我们可以使用不同的HTTP动词来拥有相同的方法名吗?[HttpGet]publicstringTest(){返回“成功获取”;}[HttpPost]publicstringTest(inti){return"SuccessPost";Swagger不接受这种配置。访问API方法时出现此错误:500:“消息”:“发生错误。”,“ExceptionMessage”:“Swagger2.0不支持:路径‘api/Common’和方法‘POST’的多个操作。请参阅配置设置-“ResolveConflictingActions”一个潜在的解决方法“这是我的路由配置: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)。出于某些疯狂的原因,MicrosoftWebApi允许您为相同的URI返回不同的资源,这就是您在尝试使用API(和Swagger)时遇到麻烦的地方。单个URI应表示单个资源。正确方法:GET/apples//返回一个苹果列表GET/apples?type=red//返回红苹果列表错误方式:GET/apples//返回苹果列表GET/apples?type=red//returnsadumptruckMicrosoftWebApi允许您使用多种方法来处理单个路线,因此您可能会非常严重地意外创建模棱两可的路线。打破Swagger的代码示例:[HttpGet,Route("apples")]publicHttpResponseMessageGetApples(){return_productRepository.Get(id);}[HttpGet,Route("apples")]pblicHttpResponseMessageGetApples([FromUri]stringfoo){returnnewDumpTruck();//说WHAAAAAAT?!许多Swagger框架在运行时扫描您的代码并创建一个Swagger2.0JSON文档。SwaggerUI请求JSON文档并基于该文档构建它看到的UI。现在,因为Swagger框架正在扫描您的代码以构建JSON,如果它看到两个表示单个资源的方法返回不同的类型,它就会中断。发生这种情况是因为Swagger不知道如何表示该URI,因为它不明确。以下是一些有助于解决此问题的方法:确保您代表具有单一资源类型的单一路由(基本URI)。如果您必须用不同类型表示单个路由(通常是个坏主意),那么您可以通过将以下属性添加到有问题的方法中来忽略使文档不明确的路由[ApiExplorerSettings(IgnoreApi=true)]这将告诉文档在记录API时完全忽略此方法,Swagger将呈现。请记住,如果您使用的是#2,那么Swagger将不会呈现此方法,这会给使用API的人带来问题。希望这可以帮助。不要破坏配置文件中的默认路由。config.Routes.MapHttpRoute(name:"DefaultApi",routeTemplate:"api/{controller}/{id}",defaults:new{id=RouteParameter.Optional});我用这种方式解决了这个问题。只需在方法开始之前使用这些行。以上就是C#学习教程的全部内容:WebAPI:同一个方法使用不同的HTTP动词。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——[Route("api/Test")][Route("api/Test/{id}")]本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: