Web API属性使用查询字符串时找到多个控制器类型

时间:2017-01-13 22:52:02

标签: c# asp.net-web-api asp.net-web-api-routing

我从Web API获得500错误""找到了与网址匹配的多种控制器类型。如果多个控制器上的属性路由与请求的"

匹配,则会发生这种情况

好的,所以我看着我的控制器,以为我拙劣了一个路由属性。一切都看起来不错。以下是冲突中的两个操作(如果我评论其中一个,那么端点可以工作)

这是“返回500

的人”
    [HttpGet]
    [Route("foo/bar/{id?}")]
    public async Task<IHttpActionResult> GetFooByIdAsync(string id) {}

这个有用,但是如果我不发表评论,另一个给出500:

    [HttpGet]
    [Route("foo/{id?}")]
    public async Task<IHttpActionResult> GetFooByIdAsync(string id){}

我的一个线索:路径真的是一样的,所以两个网址中的第一段是&#34; foo /&#34;

现在这里是更疯狂的部分:

如果我使用此URL,则两个端点都可以正常工作:

http://domain.com/foo/bar/anId

但如果我使用查询字符串,我会收到500错误:

http://domain.com/foo/bar?id=anId

任何人都可以解释发生了什么,以及如何让我的网址使用查询字符串?

其他信息:[{1}}曾经是id,路径使用int路由约束,但由于设计更改, {id:int?}必须成为id(它现在是一个编码的字符串)。我在制定一个可行的约束时遇到了麻烦。

它是一个base-64字符串,删除了填充,并使用&#39; /&#39;和&#39; +&#39;变成了&#39; _&#39;和&#39; - &#39;分别(Base64-url编码)

0 个答案:

没有答案