zoukankan      html  css  js  c++  java
  • 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() { ... }
    }
  • 相关阅读:
    利用Masscan批量生成随机ip地址表
    国光大力推荐(安利)Deepin15.4
    开启你的kali linux DIY之旅
    Docker入门简明教程
    Deepin Linux下的Metasploit安装及优化
    Hexo博客配置笔记
    Mac OS下开启自带的apache服务
    PentestBox简明使用教程
    Pentester中的XSS详解
    信息收集之网站镜像克隆
  • 原文地址:https://www.cnblogs.com/the-owl/p/6838970.html
Copyright © 2011-2022 走看看