WebAPI 按名称路由到控制器的特定方法
WebAPI routing to specific method of controller by name
这是我现在所拥有的:一条路线和所有控制器到目前为止都确认它并且工作得很好。我们希望保持原样。
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>
WebApi v2 引入了路由属性,它们可以与您的控制器一起使用class,并且可以方便路由配置。
例如:
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
代替。
这是我现在所拥有的:一条路线和所有控制器到目前为止都确认它并且工作得很好。我们希望保持原样。
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>
WebApi v2 引入了路由属性,它们可以与您的控制器一起使用class,并且可以方便路由配置。
例如:
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
代替。