gpt4 book ai didi

c# - 如何将多个参数传递/接收到 RESTful Web API GET 方法?

转载 作者:太空狗 更新时间:2023-10-29 17:37:58 26 4
gpt4 key购买 nike

采用参数(返回标量值而不是数据集)的 GET RESTful 方法的常见示例如下所示:

public string Get(int id)
{
//get and return the value
}

...其中传递的 val 通常是一个 ID,因此您可以使用它来获取基于该唯一值的标量值。

但是,如果您想传递多个值(例如字符串和整数)怎么办?是否只是像这样定义一个方法的问题:

public string Get(string someString, int someInt)
{
//get and return the value
}

...并这样调用它:

//const string uri = "http://192.112.183.42:80/api/platypusItems/someString/someInt";, zB:
const string uri = "http://192.112.183.42:80/api/platypusItems/DuckbilledPlatypisAreGuysToo/42";
var webRequest = (HttpWebRequest) WebRequest.Create(uri);

?

IOW,路由机制是否会发现,由于传递了两个参数,它应该使用两个参数调用 Get() 方法(“约定优于配置”),还是需要做更多的事情来路由事物合适吗?

最佳答案

如果您使用 Web API 2,则可以使用属性路由来路由请求,例如 http://192.112.183.42:80/api/platypusItems/DuckbilledPlatypisAreGuysToo/42

public class ItemsController : ApiController
{
[Route("api/{controller}/{id}")]
public string GetItemById(int id)
{
// Find item here ...

return item.ToString();
}

[Route("api/{controller}/{name}/{id}")]
public string GetItemByNameAndId(string name, int id)
{
// Find item here ...

return item.ToString();
}

}

http://192.112.183.42:80/api/platypusItems/DuckbilledPlatypisAreGuysToo/42 将映射到 GetItemByNameAndIdhttp://192.112.183.42 :80/api/platypusItems/42 将映射到 GetItemById

请注意,您需要像这样在配置中启用属性路由:

public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();

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

但通常您应该将实参作为附加参数传递。 GET 请求特别容易。这将适用于 Web API 1 和 2:

public class ItemsController : ApiController
{
public string GetItemById(int id)
{
// Find item here ...

return item.ToString();
}

public string GetItemByNameAndId(string name, int id)
{
// Find item here ...

return item.ToString();
}
}

假设您有默认映射配置,http://192.112.183.42:80/api/platypusItems/42 将映射到 GetItemByIdhttp ://192.112.183.42:80/api/platypusItems/42?name=DuckbilledPlatypisAreGuysToo 将映射到 GetItemByNameAndId 因为 Web API 可以为 GetItemById< 映射 2 个参数而不是 1 个参数.

更多信息可以在 Attribute Routing 上的 Mike Wasson 文章中找到。 , Routing and Action SelectionRouting in Web API .

关于c# - 如何将多个参数传递/接收到 RESTful Web API GET 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19891494/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com