全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解ASP.NET WEB API 之属性路由

以下为常规MVC路由

 config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional },
      );

如果我们要实现类似以下效果路由的话,使用常规公约路由比较麻烦。

order/Miles/三只松鼠干果/2袋
order/2017/1/13

如果使用属性路由的话就比较简单了。

新建WEB API项目的话,打开App_Start目录下的WebApiConfig.cs文件添加以下代码开启属性路由配置。

 config.MapHttpAttributeRoutes();

属性路由也可以和公约路由混合使用,如下:

 public static void Register(HttpConfiguration config)
    {
      // Web API 配置和服务

      // Web API 路由
      config.MapHttpAttributeRoutes();

      config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional },
        constraints: new { id=@"\d+"}
      );
    }

在要使用属性路由的方法上打上特性标记,如下 :

 [Route("order/{UserNickName}/{ProductName}/{count}")]

测试结果(URL经过了编码,不然会报400错误。)


通常情况下,在同一个控制器中的所有路由以相同的前缀开头

  [Route("api/books")]
  [Route("api/books/{id:int}")]
  [Route("api/books")]

这样很明显是比较麻烦的。所以我们用[RoutePrefix]属性来设置一个公共的前缀

测试结果

如果使用了[RoutePrefix]的话,某些比较特殊的api,我们可以使用波浪线来重写路由前缀,如下:

测试结果(同一个类下)

路由前缀中也可以包含参数,如下

测试结果


可以在路由中添加参数约束,如下

测试结果

如果参数不是Int类型,则不会匹配到该路由

以下都是一些会被支持到的约束

可以使用多个约束,但是要用冒号分开

[Route("users/{id:int:length(1,3)}")]
public User GetUserById(int id) { ... }

结果

如果不在范围内的话则匹配不到

自定义路由约束,需要实现IHttpRouteConstraint接口,具体查看官方

public class NonZeroConstraint : IHttpRouteConstraint
{
  public bool Match(HttpRequestMessage request, IHttpRoute route, string parameterName, 
    IDictionary<string, object> values, HttpRouteDirection routeDirection)
  {
    object value;
    if (values.TryGetValue(parameterName, out value) && value != null)
    {
      long longValue;
      if (value is long)
      {
        longValue = (long)value;
        return longValue != 0;
      }

      string valueString = Convert.ToString(value, CultureInfo.InvariantCulture);
      if (Int64.TryParse(valueString, NumberStyles.Integer, 
        CultureInfo.InvariantCulture, out longValue))
      {
        return longValue != 0;
      }
    }
    return false;
  }
}

注册约束

public static class WebApiConfig
{
  public static void Register(HttpConfiguration config)
  {
    var constraintResolver = new DefaultInlineConstraintResolver();
    constraintResolver.ConstraintMap.Add("nonzero", typeof(NonZeroConstraint));

    config.MapHttpAttributeRoutes(constraintResolver);
  }
}

使用约束

[Route("{id:nonzero}")]
public HttpResponseMessage GetNonZero(int id) { ... }

可选的URI参数和默认值

你可以通过添加一个问号标记路由参数使成为一个可选的URI参数。如果一个路由参数是可选的,你必须为这个方法参数定义一个默认值。

public class BooksController : ApiController
{
  [Route("api/books/locale/{lcid:int?}")]
  public IEnumerable<Book> GetBooksByLocale(int lcid = 1033) { ... }
}

或者在路由模版中定义默认值

public class BooksController : ApiController
{
  [Route("api/books/locale/{lcid=1033}")]
  public IEnumerable<Book> GetBooksByLocale(int lcid) { ... }
}

差不多写这么多常用的,剩余部分自己查看官网!希望对大家的学习有所帮助,也希望大家多多支持。


# asp.net  # web  # api  # 路由  # webapi  # ASP.NET Core MVC路由(Routing)的用法  # ASP.NET Core中的Razor页面实现路由功能  # ASP.NET Core使用功能开关控制路由访问操作(续)  # ASP.NET Core使用功能开关控制路由访问操作  # Asp.net Core 如何设置黑白名单(路由限制)  # 详解ASP.NET Core端点路由的作用原理  # ASP.NET Core中自定义路由约束的实现  # asp.net core webapi项目配置全局路由的方法示例  # asp.net core 属性路由和约定路由的实现  # 可选  # 默认值  # 可以使用  # 会报  # 都是  # 你可以  # 多个  # 这么多  # 要用  # 自定义  # 重写  # 成为一个  # 中也  # 很明显  # 你必须  # 要使  # 三只  # 官网  # 大家多多  # 到该 


相关文章: 高端建站三要素:定制模板、企业官网与响应式设计优化  北京专业网站制作设计师招聘,北京白云观官方网站?  建站之星×万网:智能建站系统+自助建站平台一键生成  建站主机与虚拟主机有何区别?如何选择最优方案?  利用JavaScript实现拖拽改变元素大小  小型网站建站如何选择虚拟主机?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  建站主机如何安装配置?新手必看操作指南  如何正确选择百度移动适配建站域名?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  建站主机选购指南与交易推荐:核心配置解析  建站之星伪静态规则如何设置?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  如何配置IIS站点权限与局域网访问?  建站VPS能否同时实现高效与安全翻墙?  C#如何使用XPathNavigator高效查询XML  个人网站制作流程图片大全,个人网站如何注销?  常州企业网站制作公司,全国继续教育网怎么登录?  如何做网站制作流程,*游戏网站怎么搭建?  网站制作新手教程,新手建设一个网站需要注意些什么?  公司门户网站制作流程,华为官网怎么做?  如何快速搭建响应式可视化网站?  建站主机助手选型指南:2025年热门推荐与高效部署技巧  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  C++如何使用std::optional?(处理可选值)  名字制作网站免费,所有小说网站的名字?  c# 在高并发场景下,委托和接口调用的性能对比  网站制作培训多少钱一个月,网站优化seo培训课程有哪些?  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  c# 在ASP.NET Core中管理和取消后台任务  如何在局域网内绑定自建网站域名?  如何快速上传建站程序避免常见错误?  已有域名如何快速搭建专属网站?  建站之星2.7模板快速切换与批量管理功能操作指南  制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?  常州企业建站如何选择最佳模板?  昆明网站制作哪家好,昆明公租房申请网上登录入口?  建站10G流量真的够用吗?如何应对访问高峰?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  寿县云建站:智能SEO优化与多行业模板快速上线指南  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  如何通过免费商城建站系统源码自定义网站主题与功能?  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  建站之星北京办公室:智能建站系统与小程序生成方案解析  怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?  如何选择高效响应式自助建站源码系统?  山东网站制作公司有哪些,山东大源集团官网?  如何快速搭建高效WAP手机网站吸引移动用户?  如何快速查询网站的真实建站时间? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。