我正在启用HttpAttribute的.net Web api 2站点上使用VB,并且尝试使用电子邮件地址作为路由定义中的可选参数。
这是控制器中的路由定义:
<Route("someController/SomeAction/{id}/{emailAddress?}")>
<HttpGet>
Public Function SomeAction(ByVal id As String, Optional ByVal emailAddress As String = "") As HttpResponseMessage
' ..do stuff
End Function
如果我从请求路径中省略了可选的电子邮件地址,则服务器将执行此方法。如果我将emailAddress添加到路径的末尾,则会收到404 Not Found响应,例如:
http://myapiserver/some/action/1A2B/ ' <-- route found and the SomeAction method is executed
http://myapiserver/some/action/1A2B/myemail@mydomain.ex ' <-- not found
我尝试对使用的电子邮件值进行URL编码,但仍然无法找到404:
http://myapiserver/some/action/1A2B/myemail%40mydomain.ex ' <-- also 404-not found
我不能是第一个尝试向API服务器发送电子邮件地址的人。
我在做什么错了?
答案 0 :(得分:1)
该解决方案非常简单。
只需在URL的末尾添加一个/,以便服务器知道电子邮件是路径的一部分:
http://myapiserver/some/action/1A2B/myemail@mydomain.ex/ '<-- WORKS!
由于没有以斜杠结尾,服务器认为我们正在寻找文件,因为电子邮件地址以.abc结尾。
答案 1 :(得分:0)
您必须为可选参数分配一些有效的默认值,就像在您的情况下为emailAddress分配一些默认的有效值一样,以便在您不提供URL的情况下,该函数可以选择该值。
向前迈进,在处理函数时,您可以查找与emailAddress对应的默认值,如果找到匹配的默认值,则只需忽略它即可。