当前位置:  开发笔记 > 编程语言 > 正文

你能在同一个web api控制器中使用不同参数类型的2个GET方法吗?

如何解决《你能在同一个webapi控制器中使用不同参数类型的2个GET方法吗?》经验,为你挑选了1个好方法。

我有一个asp.net web api控制器,里面有2个GET方法.一个接受字符串参数,另一个接受int参数.我只有使用web api设置的默认路由.

        public HttpResponseMessage GetSearchResults(string searchTerm)
        {
            HttpResponseMessage response;
            //Do Work
            return response;
        }

        public HttpResponseMessage Get(int id)
        {
            HttpResponseMessage response;
            //Do Work
            return response;
        }

每次我在URL中传递一个int值时,都会调用带有string参数的GET方法.永远不会调用带有int参数的GET方法.

是否可以在同一个控制器中使用不同参数类型的2个GET方法?

-Edit-建议的重复问题是不同的,因为它询问大约2个方法具有完全相同的参数类型 - 我问的是不同的参数类型.



1> Bradford Dil..:

对的,这是可能的.开箱即用的默认配置,假设您传递searchTerm作为查询字符串参数,您应该工作.但是,如果您尝试将其作为URL的一部分传递,例如/api/myurl/blah,默认约定路由将尝试将其与int方法的版本匹配并返回错误.您将需要编辑默认配置或使用属性路由.

一般来说,我发现基于约定的MVC路由在WebApi中不太有用,所以我通常禁用它并使用属性路由.

要启用属性路由,请添加

config.MapHttpAttributeRoutes();

到你的WebApi配置.

然后你可以这样标记你的方法

[HttpGet]
[Route("api/myobject/")]
public HttpResponseMessage GetSearchResults(string searchTerm)
{
    HttpResponseMessage response;
    //Do Work
    return response;
}

[HttpGet]
[Route("api/myobject/{id:int}")]
public HttpResponseMessage Get(int id)
{
    HttpResponseMessage response;
    //Do Work
    return response;
}

现在,您可以通过调用第一个方法

/api/myobject?searchTerm=blah

和第二个过道

/api/myobject/1

他们不应该碰撞.

但是,如果要将searchTermURL设置为URL而不是查询参数,则可以将路径更改为

[Route("api/myobject/{searchTerm}")]

api/myobject/{id:int}路线将捕获所有的ID,api/myobject/{searchTerm}并将捕获大部分其他内容.但是,要小心这一点,好像URL不是URL编码的奇怪事情往往会发生.

我不知道你正在寻找什么样的URL格式,所以我提供的只是简单的例子.我之前发布的链接深入研究了属性路由.它允许您按照WebApi从MVC继承的约定生成比路由更复杂的路由.

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有