如何编写Web API路由映射,以便它允许我创建一个参数可选?

时间:2013-04-03 08:03:58

标签: c# asp.net-mvc asp.net-web-api asp.net-mvc-routing

我有一个Web API服务,如下所示:

[HttpGet]
public UserProfile SearchByEmail(string siteName, string providerName, string email)
{}

我想将providerName设为可选,以下网址应该有效:

{0}: http://www.domain.com/sites/siteName1/providerName1/User/SearchByEmail?email=email1
{1}: http://www.domain.com/sites/siteName1/User/SearchByEmail?email=email1

我写了下面的映射:

 config.Routes.MapHttpRoute(
               name: "SearchUserByEmail",
               routeTemplate: "sites/{siteName}/{providerName}/User/SearchByEmail",
                defaults: new
                {
                    controller = "User",
                    action = "SearchByEmail",
                    providerName = UrlParameter.Optional
                });

但它只支持{0}网址,不适用于{1}网址。

如何编写映射以便允许我使providerName可选?

1 个答案:

答案 0 :(得分:1)

只有url片段的最后一个标记可以是可选的。如果您希望这样做,则必须将路线模式更改为:sites/{siteName}/User/SearchByEmail/{providerName}。或者,如果参数是可选的,我的建议是将其传递给查询字符串。