首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导入api有重复的签名操作,蔚蓝的web api。

导入api有重复的签名操作,蔚蓝的web api。
EN

Stack Overflow用户
提问于 2018-05-22 05:58:17
回答 1查看 1.3K关注 0票数 4

我正在尝试导入我的swagger模式来查看APIM,但是它总是给我提供重复的签名错误。

导入API具有重复的签名操作:两个带有签名'GET /api/v1/brokers/{brokerid}‘的操作;两个带有签名'GET /api/v1//{brokerid}’的操作;两个签名为'GET /api/v1/office/{offices}‘的操作;两个签名为'GET /api/v1/teams/{team}’的操作。

我已经检查了我的API路由和swagger模式,但没有看到任何重复。这个模式更新在2018年5月11日之前运行良好。

我读过发布说明,但什么也找不到。我的终点看起来是这样的。

代码语言:javascript
复制
    [Route("{officeId:int:min(1)}", Name = "GetOfficeById")]
    public IHttpActionResult GetOfficeById(int officeId, [FromUri] IncludeImageModel includeImage)
    
    [Route("{brokerId:int:min(1)}", Name = "GetBrokerById")]
    public IHttpActionResult GetBrokerById(int brokerId, [FromUri] IncludeImageModel includeImage)
    
    [Route("{teamId:int:min(1)}", Name = "GetTeamById")]
    public IHttpActionResult GetTeamById(int teamId, [FromUri] IncludeImageModel includeImage)
    
    [Route("MarketReport/{brokerId:int}", Name = "GetMarketReportsByBrokerId")]
    public IHttpActionResult GetMarketReportsByBrokerId(int brokerId, [FromUri]CBBainApi.Models.Common common)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-25 10:49:40

我通过从Path template validation changes中读取发行说明部件解决了这个问题。正如它所说的‘改进重复逻辑’,他们在检查唯一性之前增加了规范化步骤:

如果路径模板包含查询字符串,则?&字符分隔后的所有段都按字母顺序排序,不区分大小写(没有对=字符的任何特殊处理)。

这意味着,如果您有两个端点,如

代码语言:javascript
复制
    [RoutePrefix("brokers")]
    public class BrokerController : ApiController
    
    [HttpGet]
    [Route("{brokerId:int:min(1)}", Name = "GetBrokerById")]
    public IHttpActionResult GetBrokerById(int brokerId, [FromUri] IncludeImageModel includeImage)
    
    [HttpGet]
    [Route("{webUrl}", Name = "GetBrokerByWebUrl")]
    public IHttpActionResult GetBrokerByWebUrl(string webUrl, [FromUri] IncludeImageModel includeImage)

此APIM将通过将它们转换为类似的方式来检查其唯一性:

"brokers/{brokerId:int:min(1)}""brokers/{0}""brokers/{webUrl}""brokers/{0}"

并且会产生一个重复的签名错误。

两个端点都在移动应用程序中使用,因此我无法选择更改路由,因此我将两个端点合并为

代码语言:javascript
复制
    [HttpGet]
    [Route("{param}", Name = "GetBroker")]
    public IHttpActionResult GetBroker(string param, [FromUri] IncludeImageModel includeImage)
          {
             int brokerId = default(int);
             if (int.TryParse(param, out brokerId))
                 ... do something
             else
                 ...do something else
            //return something;
        }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50460753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档