目前我很挠头,为什么路由到我的一个函数失败。
路由通过属性定义:
[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}")]