zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    遭遇:“传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确” 错误
    JS控制form表单action去向
    easyui form 提交问题,纠结了很久,有点诡异
    easyui的tab加载页面中的form重复提交
    AJAX POST请求中参数以form data和request payload形式在servlet中的获取方式
    $.AJAX参数提交及后台获取方式
    多条件判断语句case
    条件判断语句if
    条件测试和捕获信号
    向脚本传递参数
  • 原文地址:https://www.cnblogs.com/goodlucklzq/p/4418640.html
Copyright © 2011-2022 走看看