原文地址:http://www.intstrings.com/ramivemula/articles/attribute-based-routing-in-asp-net-web-api/
我们
大多数
人
已经
知道
我们
在
WebApiConfig
文件
中
配置
的
Web
API
的
传统
路由
概念
。
这
种方法
解决了
大多数
基本
的
路由
问题
,
但是
它
将
自定义
路由
的
细粒度
的
控制
和
灵活性
进行
限制
。
属性
基于
路由
是
最受欢迎
的
nuget
可以
灵活
地
管理
控制器/行动
一级
的
路线
。
在
本
教程中
,
我们
打算
去
看
我们
如何
能
得到
的
基本
属性
基于
路由
的
作品
。
在我们
进入
一些
代码
之前
,
让
我
第一次
分享
关于
基于
属性
的
路由
和
社区
的
贡献
— —
http://weblogs.asp.net/scottgu/archive/2013/04/19/asp-net-web-api-cors-support-and-attribute-based-routing-improvements.aspx
ScottGu 的
最近
的
博客
文章
。
让我们
感谢
蒂姆
· 麦考尔
— —
http://attributerouting.net/
为
我们
提供
一个
美丽
的
特征
。
让我们
开始
与
Web
API
模板
创建
一个
新
的
ASP.Net
MVC4
项目
。
右键
单击
项目
,
选择
管理
Nuget
程序包
,
搜索
"AttributeRouting"
,
从
结果
中
安装
AttributeRouting
(ASP.NET
Web
API)
。
下面为一些代码示例
using AttributeRouting;
using AttributeRouting.Web.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace MvcApplication1.Controllers
{
// http://xxx/Products/GetEverything [RoutePrefix("Products")] public class ValuesController : ApiController { [GET("GetEverything")] public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; }
// http://xxx/Products/GetProduct/1 [GET("GetProduct/{id}")] public string Get(string id) { return "value1"; } } }
这样能更方便的定义路由级别,如下的一些示例
[GET("GetProductByName/{name=Merc}")]
public string GetByName(string name)
{
return name;
}
public string GetByName(string name)
{
return name;
}
[
GET
(
"GetProductByName/{name:alpha:length(4)=Merc}"
)]
public string
GetByName(
string
name){
return
name;}
[GET("GetEverything", ActionPrecedence = 1)]
[GET("Index")]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
[GET("GetProduct/{id}?{x}")]
public string Get(string id)
{
return String.Format("Passed Id : {0}, Passed Querystring: {1}",
id,
System.Web.HttpContext.Current.Request.QueryString["x"].ToString());
}
[RouteArea("My")]
[RoutePrefix("Products")]
public class ValuesController : ApiController
以上为一部分示例,可以看到,这样相当于自定义路径。