< h1 >.符号中断路由



目前我很挠头,为什么路由到我的一个函数失败。

路由通过属性定义:

[Route("emails/{emailAddress}")]
[SwaggerResponse(HttpStatusCode.OK, null, typeof(EmailResponse))]
public async Task<IHttpActionResult> GetEmail(string emailAddress)

如果我传入正常文本,即"abc",这工作良好。它像预期的那样到达了路线。如果我传入一个实际的电子邮件地址:"abc@example.com",我得到一个404返回,并且没有命中端点。看来……符号破坏了模式匹配,我不知道为什么。

我尝试了一堆不同的东西,包括添加RouteDebugger,将参数类型改为对象而不是字符串,但似乎没有任何工作,我还没有能够追踪到任何线索,为什么。

编辑:

似乎在/中包含我的参数是可行的。如果URL最终是

电子邮件/test.com/它是

电子邮件/test.com

不工作

我仍然不知道是什么导致了这个问题。

在asp.net core中,我在route参数前使用星号(*),通过这种方式,您可以将任何特殊字符传递到路由

[Route("emails/{*emailAddress}")] //added *
[SwaggerResponse(HttpStatusCode.OK, null, typeof(EmailResponse))]
public async Task<IHttpActionResult> GetEmail(string emailAddress)

但请注意,当您使用*时,不能在*之后添加另一个路由参数,例如

这不是工作

[Route("emails/{*emailAddress}/{anther}")]

但这是可以的:

[Route("emails/{other}/{*emailAddress}")]

最新更新