• WebApi官网学习记录---webapi中controller与action的选择


    如果framework找到一个匹配的URI,创建一个包含占位符值的字典,key就是这些占位符(不包括大括号),value来自URI或者默认值,这个字典存储在IHttpRouteData对象中。默认值可能是RouteParameter.Optional,此时对应的key/value不会被添加到该字典中。

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

    对于URI"api/products",route dictionary中包括:

    • controller:"product"
    • category:"all"

    对于URI"api/products/toys/123",route directionary中包括:

    • controller:"products"
    • category:"toys"
    • id:"123"

    Controller的选择:

    • 在route dictionary中找到“controller”
    • 取到key的值,和"Controller"组合到一起,然后得到对应的controller的类型名
    • 在web api的controller中查找这个类型名的controller

    Action的选择:

    • action必须匹配HTTP method
    • 如果route dictionary存在"action",则action的名字需与之匹配
    • 对于action的每个参数,如果参数来自URI,则这个参数名必须能在route dictionary或URI中带的参数中找到【可选参数与复杂类型除外】
    • 尽可能匹配多的参数,最好的匹配可能是一个没有参数的方法
    routes.MapHttpRoute(
        name: "ApiRoot",
        routeTemplate: "api/root/{id}",
        defaults: new { controller = "products", id = RouteParameter.Optional }
    );
    routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
    
    public class ProductsController : ApiController
    {
        public IEnumerable<Product> GetAll() {}
        public Product GetById(int id, double version = 1.0) {}
        [HttpGet]
        public void FindProductsByName(string name) {}
        public void Post(Product value) {}
        public void Put(int id, Product value) {}
    }

    HTTP Request:

    GET http://localhost:34701/api/products/1?version=1.5&details=1

    依据以上原则分析最终选择的action是:GetById

  • 相关阅读:
    JavaScript
    monkeyrunner总结
    repo简介
    android4.4 settings 中控制卡1 卡2都振动
    卡1卡2设置不同的默认铃声
    获取布局 ActionBar
    android Settings 解析
    设置应用中出现NFC服务,去掉
    判断当前网络显示运营商
    设置中默认铃声 通知 闹钟等
  • 原文地址:https://www.cnblogs.com/goodlucklzq/p/4418640.html
Copyright © 2020-2023  润新知