如何向Web API传递多个参数

3
我正在使用 Fiddler 进行请求测试。
我使用以下请求调用我的 Web 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 Not Found 我使用的方法如下:
http://localhost:50079/Import/Test/abc/cde

 Type :Get

 web api method:

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

我不想使用任何路由...如果我传递多个参数,为什么它无法识别,请告诉我原因...


我已经回答了关于POST和GET请求的通用解决方案这个问题 - Fatih GÜRDAL
4个回答

4

您必须指定匹配的路由。

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

请尝试上述方法。

2
您需要在方法上添加HttpGet属性,就像这样吗?
//http://localhost:50079/api/Import/abc?value=cde
[HttpGet]
[ActionName("Test")] 
public bool getconnection(string id,string value)   
{
    return true;   
}

Tot,如果我的参数中有空格,我该如何传递值。例如:Biz sight(在URL中)。 - Kavitha
你需要用"%20"替换空格字符,就像这样:http://localhost:50079/api/Import/abc?value=Biz%20sight - TotPeRo

1

TGH的答案是更优雅的解决方案。

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

根据Web 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

我已经通过Fiddler传递了http://localhost:50079/Import/Test/abc?value=cde,但是它出现了错误...HTTP/1.1 404未找到。 - Kavitha

0

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

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

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

但解决方案在这个连接中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接