2013-05-02 85 views
0

我想将值传递给Web Api中的控制器/操作,但它没有找到它。WebApi路由不通过值

我的路由映射:

 config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{action}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

我ApiController:

[HttpGet] 
    public string MyThing() 
    { 
     return "thing"; 
    } 

    [HttpGet] 
    public string MyStuff(int myid) 
    { 
     return "something " + myid; 
    } 

我通过RestSharp REST调用:

var request = new RestRequest { Resource = "api/values/MyStuff/555", Method = Method.GET }; 

如果我叫MyThing()它的工作原理,但。看来问题在于传递id值。

+0

WEB API使用控制器/ HTTP方法/参数 方法名应该GET/POST /把/ etc ... – 2013-05-02 22:15:02

+0

如果你把一个HTTPGET或者HttpPost属性它会使用请求的功能。 – 2013-05-02 22:17:36

+0

是的,但你不应该。这违背了web api的路由目的。 – 2013-05-02 22:21:17

回答

6

从 “身份识别码” 到 “ID”

[HttpGet] 
public string MyStuff(int **id**) 
0

解决修改参数名称。

我发现我必须添加参数作为查询字符串,而不是/路径值。

api/values/MyStuff?myid=555 

代替

api/values/MyStuff/555 
+5

基兰给了你一个更好的解决方案 – 2013-05-02 22:58:01

+0

我同意菲利普。基兰是一个更好的解决方案。这也是更加RESTful恕我直言。 – bryanmac 2013-05-03 01:30:33

+0

尽管感觉错误的是将名称传递值看作是普通的** id **,但它实际上更好。是的更宁静和优雅。 – 2013-05-03 02:30:23