如果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();
//WebApiConfig.Register(GlobalConfiguration.Configuration); // 这行代码替换成下面一行代码
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
使用方法一
public class ValuesController : ApiController
{
[Route("api/Val/Get")] // 表示 访问Get()方法时 就是api/Val/Get
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
[Route("Values/{id}/Get")] // 还可以使用带参数访问:Values/5/Get
public string Get(int id)
{
return "value";
}
}
使用方法二 路由前缀
同一个控制器的所有的action的所有特性路由标识一个相同的前缀,这种做法并非必须,但这样能够增加url的可读性,一般的做法是在控制器上面使用特性,[RoutePrefix]来标识
[RoutePrefix("api/Values")]
public class ValuesController : ApiController
{
[Route("GetMy")] // 访问时 api/Values/GetMy
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}
WebApi 中的特性路由
最新推荐文章于 2022-07-22 16:22:17 发布