2014-02-22 43 views
3

我使用小提琴手来测试我的要求..如何传递MULT参数网页API

以下reuest我习惯叫我的网络API方法..它工作正常。

http://localhost:50079/Import/Test/abc 

Type :Get 

web api method: 

     [ActionName("Test")] 
     public bool getconnection(string id) 
     { 
      return true; 
     } 

如果我通过多参数我得到错误:HTTP/1.1 404未找到

我用这样的:

http://localhost:50079/Import/Test/abc/cde 

Type :Get 

web api method: 

      [ActionName("Test")] 
      public bool getconnection(string id,string value) 
      { 
       return true; 
      } 

我不希望使用任何途径。 ..让我知道为什么如果我通过多个参数为什么它不被识别..

+0

POST和GET请求的一般解决方案我已经回答[此问题](http://stackoverflow.com/a/372​​98083/5714537)。 –

回答

4

你必须指定一个匹配的路线

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

尝试上述

1

TGH's answer是更好的解决方案。

但是,如果您不想使用任何路由,则必须将其他参数作为查询字符串参数传递,因为路由引擎不知道映射到哪些变量的值(除了参数id在默认路由中配置)。

基于网络API约定,如果你有一个这样的控制器:

public class ImportController : ApiController 
{ 
    [ActionName("Test")] 
    public bool GetConnection(string id, string value) 
    { 
     return true; 
    } 
} 

相应的URI将是:

http://localhost:50079/api/Import/abc?value=cde 

如果要映射使用[ActionName]属性,您需要将API配置为按操作名称进行路由。见this tutorial

+0

我已经通过http:// localhost:50079/Import/Test/abc?value = cde来自Fiddler ....它给错误.HTTP/1.1 404 Not Found – Kavitha

+0

@Kavitha看到我更新的答案。 – HTX9

2

你把方法上的HttpGet属性,像这样?

//http://localhost:50079/api/Import/abc?value=cde 
[HttpGet] 
[ActionName("Test")] 
public bool getconnection(string id,string value) 
{ 
    return true; 
} 
+0

谢谢tot!添加[HttpGet]属性现在工作正常... – Kavitha

+0

总而言之,如果我的参数有空间b/w这个词,我该如何传递值。例如:商业视线(在URL中) – Kavitha

+0

您需要用以下代码替换“%20”的空格字符:http:// localhost:50079/api/Import/abc?value = Biz%20sight – TotPeRo

0

[FromBody]一个参数和[FromUri]一个参数。 例如:

public bool InserOrUpdate([FromBody] User user,[FromUri] IsNew) 

[FromBody] => AJAX数据 [FromUri] =>查询字符串数据

但是该解决方案是在this connection