这就是我现在所拥有的:一条路线和到目前为止的所有控制器都对其进行确认,并且工作出色。我们希望保持原样。
GlobalConfiguration.Configuration.Routes.MapHttpRoute(
name: "DitatApi",
routeTemplate: "api/{controller}/{action}"
现在,我们创建了新的控制器,但需要以不同的方式进行路由。以下是控制器代码以及如何路由这些方法。我该如何设置这样的路线?
public class CarrierController : ApiController
{
[HttpGet]
public object Get(string id, int? key, string direction)
{
return null;
}
[HttpPost]
public object Update()
{
return null;
}
[HttpDelete]
public object Delete(int key)
{
return null;
}
[HttpGet]
public object GenerateRandomObject(int randomParam)
{
return null;
}
}
GET /api/carrier?id=<id>&key=<key>&direction=<direction>
POST /api/carrier
DELETE /api/carrier?key=<key>
GET /api/carrier/random?randomParam=<random>
答案 0 :(得分:0)
WebApi v2引入了路由属性,这些属性可以与Controller类一起使用,并且可以简化路由配置。
例如:
public class BookController : ApiController{
//where author is a letter(a-Z) with a minimum of 5 character and 10 max.
[Route("html/{id}/{newAuthor:alpha:length(5,10)}")]
public Book Get(int id, string newAuthor){
return new Book() { Title = "SQL Server 2012 id= " + id, Author = "Adrian & " + newAuthor };
}
[Route("json/{id}/{newAuthor:alpha:length(5,10)}/{title}")]
public Book Get(int id, string newAuthor, string title){
return new Book() { Title = "SQL Server 2012 id= " + id, Author = "Adrian & " + newAuthor };
}
...
但是,请注意,查询参数?var1 = 1&var2 = 2 不受评估决定使用哪种API方法的评估。
WebApi 是基于反射的,因此,这意味着花括号{vars}必须与方法中的相同名称匹配。
因此,为了匹配类似api/Products/Product/test
的内容,您的模板应该看起来像这样"api/{controller}/{action}/{id}"
,并且您的方法需要这样声明:
[ActionName("Product")]
[HttpGet]
public object Product(string id){
return id;
}
参数string name
被string id
替换的地方。