Web Api 2空字符串参数GET

时间:2015-02-22 18:59:20

标签: asp.net-web-api routes

我已将路线设置为: 〔路线(" {ID} /用户/搜索/ {搜索}&#34)] 以及相关的行动是: SomeAction(int id,string text)

该服务具有以下功能。 对于id = {id}的资源,此资源的用户将获得与{search}字词(用户名,电子邮件等)匹配的用户。

{search}可以有一个值,所以服务只返回匹配的实体,或者没有值(空字符串或null),所以服务返回所有内容。

对于具有值的部分,它可以正常工作。 对于第二部分,我找不到设置匹配空字符串的get请求的东西。

我尝试了以下内容: 1 / users / search / null {search} =" null" 1 / users / search /与路线不匹配 1 /用户/搜索与路线不匹配

是否有人暗示如何做到这一点?

更新:我试图替换动作: SomeAction(int id,string text) 有: SomeAction(模型模型),其中模型是

public class ApplicationUserSearchModel
{
    [Required]
    public int Id { get; set; }
    [Required(AllowEmptyStrings = true)]
    public string MatchText { get; set; }
}

没有运气,因为我不知道要发送什么以便将网址与此匹配。

1 个答案:

答案 0 :(得分:5)

您应该使用search标记?参数,并在路线中将其标记为可选,并在您的操作中默认将其设置为null

[Route("{id}/users/search/{search?}")]
public HttpResponseMessage Search(int id, string search = null)    

我原本以为路由/操作参数名称是问题,但我不对。以下是上一个答案:

路线定义中的参数名称与您的操作不匹配,这会导致您的问题。

[Route("{id}/users/search/{search}")]
public HttpResponseMessage Search(int id, string text)

您应该将操作中的string参数从text更新为search,以匹配Route属性中的参数名称。