我目前正在使用Web API 2.2构建API
我有RESTful部分工作,但现在我需要一个非RESTful控制器:
public class PremisesController : ApiController
{
private PremiseService _service;
public PremisesController()
{
_service = new PremiseService();
}
[HttpGet]
public IHttpActionResult Premise(string id)
{
id = id.Replace(" ", String.Empty).ToUpper();
List<Premise> premises = _service.GetPremisesForPostcode(id);
return Ok(premises);
}
[HttpGet]
public IHttpActionResult Building(string id)
{
double premise = Convert.ToDouble(id);
Building building = _service.GetBuildingsForPremise(premise);
return Ok(building);
}
}
路由配置如下:
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
我收到的错误是,当我发起GET操作时,它无法区分这两种方法:
找到了与请求匹配的多项操作
所以我的问题是我是否需要在每个方法的基础上指定Route属性,如果是,为什么?第二条路线(ActionApi)没有处理这种情况吗?
答案 0 :(得分:0)
编辑:
我刚刚测试了你的代码,它的工作方式就是这样......也许只是目前还不清楚。
答案 1 :(得分:0)
您还可以在控制器上使用RoutePrefix属性。
[RoutePrefix("api/premises")]
public class PremisesController : ApiController
与路由属性相结合意味着你不应该使用相同的路径获得多个动作