我从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编码)