如何使用电子邮件地址作为HttpAttribute Route

时间:2018-12-17 22:46:28

标签: vb.net asp.net-web-api routing asp.net-web-api2

我正在启用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服务器发送电子邮件地址的人。

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

该解决方案非常简单。

只需在URL的末尾添加一个/,以便服务器知道电子邮件是路径的一部分:

http://myapiserver/some/action/1A2B/myemail@mydomain.ex/ '<-- WORKS!

由于没有以斜杠结尾,服务器认为我们正在寻找文件,因为电子邮件地址以.abc结尾。

答案 1 :(得分:0)

您必须为可选参数分配一些有效的默认值,就像在您的情况下为emailAddress分配一些默认的有效值一样,以便在您不提供URL的情况下,该函数可以选择该值。

向前迈进,在处理函数时,您可以查找与emailAddress对应的默认值,如果找到匹配的默认值,则只需忽略它即可。