如果http 请求的的方法相同(比如都是post)
,并且请求的参数也相同,这时候有点不好办了,此时我们采用特性路由
特性路由的目的是为了解决我们公共路由模板引擎解决不了的问题。一个Action 定义了特性路由之后,就能通过特性路由上的路由规则找到
1:在用特性路由之前先更改
WebApiConfig
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
},
constraints
: new { id
=@"/d+"}
);
}
}
2:更改
Global.asax.cs
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration
.RegisterAllAreas();
GlobalConfiguration
.Configure(WebApiConfig
.Register
);
FilterConfig
.RegisterGlobalFilters(GlobalFilters
.Filters
);
RouteConfig
.RegisterRoutes(RouteTable
.Routes
);
BundleConfig
.RegisterBundles(BundleTable
.Bundles
);
}
}
使用方法一
public class ValuesController : ApiController
{
[Route("api/Val/Get")]
public IEnumerable
<string> Get()
{
return new string[] { "value1", "value2" };
}
[Route("Values/{id}/Get")]
public string Get(int id
)
{
return "value";
}
}
使用方法二 路由前缀
同一个控制器的所有的action的所有特性路由标识一个相同的前缀,这种做法并非必须,但这样能够增加url的可读性,一般的做法是在控制器上面使用特性,
[RoutePrefix]来标识
[RoutePrefix("api/Values")]
public class ValuesController : ApiController
{
[Route("GetMy")]
public IEnumerable
<string> Get()
{
return new string[] { "value1", "value2" };
}
}