• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > 详解ASP.NET WEB API 之属性路由

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

作者:三只仓鼠 字体:[增加 减小] 来源:互联网 时间:2017-05-11

三只仓鼠通过本文主要向大家介绍了精通asp.net web api,asp api,asp 获取api json数据,ajax asp/api plus,avzyz api.asp等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

以下为常规MVC路由

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

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

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

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

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

 config.MapHttpAttributeRoutes();
</div>

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

 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+"}
      );
    }

</div>

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

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

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


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

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

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

测试结果

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

测试结果(同一个类下)

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

测试结果


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

测试结果

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

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

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

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

结果

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

自定义路由约束,需要实现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;
  }
}

</div>

注册约束

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

    config.MapHttpAttributeRoutes(constraintResolver);
  }
}

</div>

使用约束

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

可选的URI参数和默认值

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

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

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

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

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

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ASP.NET core Web中使用appsettings.json配置文件的方法
  • 详解ASP.NET WEB API 之属性路由
  • ASP.NET webUploader上传大视频文件相关web.config配置
  • asp.net web页面自定义分页控件使用详解
  • ASP.NET Web.config配置文件详解
  • ASP.NET web.config 配置节点详解
  • ASP.NET Web Api 2实现多文件打包并下载文件的实例
  • ASP.NET web.config中 数据库连接字符串加密解密
  • 在ASP.NET 2.0中操作数据之五十三:在Data Web控件显示二进制数据
  • asp.net基于Web Service实现远程上传图片的方法

相关文章

  • 2017-05-11asp.net 事件与委托分析
  • 2017-05-11ASP.NET中数据库操作初步
  • 2018-08-20MVC数据验证详解
  • 2017-05-11asp.net中生成缩略图并添加版权实例代码
  • 2017-05-11Asp.Net MVC中配置Serilog的方法
  • 2017-05-11Asp.Net上传图片同时生成高清晰缩略图
  • 2017-05-11ASP.NET MVC文件上传教程(二)
  • 2017-05-11ASP.NET GridView中文本内容无法换行(自动换行/正常换行)
  • 2017-05-11c# 可变数目参数params实例
  • 2018-08-20基于Entity Framework自定义分页效果

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • .NET Core 2.1中HttpClientFactory的最佳实践记录
    • vs2010制作简单的asp.net网站
    • 在ASP.NET 2.0中操作数据之五十五:编辑和删除现有的二进制数据
    • NET索引器使用方法实例代码
    • .Net消息队列的使用方法
    • 解决asp.net ajax sys未定义的解决方法
    • asp.net 无限分类第1/3页
    • mvc file控件无刷新异步上传操作源码
    • mvc重定向方式详解
    • .NET中弹出对话框的方法汇总

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有