• Web API 路由 [一] Convention-Based Routing


    Routing by Naming Convention

      在App_Start/ WebApiConfig.cs文件中

    routes.MapHttpRoute(
        name: "API Default",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );

     步骤:

    1) 进行路由匹配,若匹配失败则返回404

    2) 找到对应的Controller

    3) 找到对应的Action。

    原则1:根据HTTP的方法,找以该方法开头的函数。例如,HTTP的GET方法可以对应 GetUser(int id)或者GetAllUser()

    原则2:在1基础上,如果其他可选的参数设置了(例如{id}),则选择相应满足的函数。

    原则3:如果不存在对应的action,则调用失败

    Routing by Explicitly Specification

    • 使用HttpGet, HttpPut, HttpPost, HttpDelete 关键字,显式说明
    • AcceptVerbs关键字一次声明多个HTTP方法
    public class ProductsController : ApiController
    {
        [HttpGet]
        public Product FindProduct(id) {}
    
        [AcceptVerbs("GET", "HEAD")]
        public Product FindProduct(id) { }
    }

    Routing by Action Name

      1) 依据URI中的Action字段选择Action

    routes.MapHttpRoute(
        name: "ActionApi",
        routeTemplate: "api/{controller}/{action}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );

       2) Action函数前,声明允许的HTTP方法

    public class ProductsController : ApiController
    {
        [HttpGet]
        public string Details(int id);
    }

       第二步中,也可以对一个Action进行重载,使用ActionName关键字

    public class ProductsController : ApiController
    {
        [HttpGet]
        [ActionName("Thumbnail")]
        public HttpResponseMessage GetThumbnailImage(int id);
    
        [HttpPost]
        [ActionName("Thumbnail")]
        public void AddThumbnailImage(int id);
        //防止被调用声明
        [NonAction]  
        public string GetPrivateData() { ... }
    }
  • 相关阅读:
    理解SQL查询的底层原理
    Android手机里的垃圾文件和文件夹清理
    从树莓派开始玩电脑
    Oracle 游标使用全解
    oracle获得当前时间,精确到毫秒并指定精确位数
    Oracle存储过程创建及调用
    windows命令行(DOS批处理)添加任务计划
    JS计算字符串的长度
    皮肤和DLL和图片等项目文件完全整合到exe中
    C#中使用Socket实现简单Web服务器
  • 原文地址:https://www.cnblogs.com/the-owl/p/6838970.html
Copyright © 2020-2023  润新知