使用WebAPI路由属性
本文关键字:属性 路由 WebAPI 使用 | 更新日期: 2023-09-27 18:16:17
我有几个方法,我想为它们的url遵循一个特定的模式。
基本上有餐厅,它们有id,以及它们下面的终端集合。
我试图得到以下类型的模式出现:api/Restaurant -获取所有餐厅api/Restaurant/Bobs -获取ID为Bobs的餐厅api/Restaurant/Bobs/terminals -获取Bobs Restaurant中的所有终端api/Restaurant/bobs/terminals/second -获取餐厅bob中ID为second的终端
我已经有了这样做的方法,我已经为每个方法分配了Route属性,如下所示:
[HttpGet]
public IEnumerable<IRestaurant> Get()
{
//do stuff, return all
}
[HttpGet]
[Route("api/Restaurant/{restuarantName}")]
public IRestaurant Get(string restaurantName)
{
//do stuff
}
[HttpGet]
[Route("api/restuarant/{restaurantName}/terminals")]
public IEnumerable<IMiseTerminalDevice> GetDevices(string restaurantName)
{
//do stuff
}
[HttpGet]
[Route("api/restaurant/{restaurantName}/terminals/{terminalName}")]
public IMiseTerminalDevice GetDeviceByName(string restaurantName, string terminalName)
{
//do stuff
}
然而,只有我的基本GET (api/餐厅)是工作的。我的WebAPI配置是默认的,读取
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
谁知道我哪里出错了?所有其他方法返回路由不匹配(餐厅与ID)或404。
提前感谢!
我刚刚创建了默认的WEB API项目,其中包括一个ProductsController。接下来,我将您的api方法粘贴到。
public class ProductsController:ApiController
{
[HttpGet]
[Route("api/Restaurant/{restaurantName}")]
public IHttpActionResult Get(string restaurantName)
{
//do stuff
return Ok("api/Restaurant/{restuarantName}");
}
[HttpGet]
[Route("api/restuarant/{restaurantName}/terminals")]
public IHttpActionResult GetDevices(string restaurantName)
{
//do stuff
return Ok("api/restuarant/{restaurantName}/terminals");
}
[HttpGet]
[Route("api/restaurant/{restaurantName}/terminals/{terminalName}")]
public IHttpActionResult GetDeviceByName(string restaurantName, string terminalName)
{
//do stuff
return Ok("api/restaurant/{restaurantName}/terminals/{terminalName}");
}
}
最后,我用Fiddler发出一个请求
**http://localhost:9969/api/restuarant/Vanbeo/terminals**
,一切正常!
系统配置:Visual Studio 2013, WEB API 2.2, Net 4.5
请使用空项目重试吗?
PS:我不得不把这个作为一个答案,因为评论中没有足够的空间!