• Web Api实践系列(二)路由模板,路由惯例,路由设置


    一、默认路由

    ASP.NET Web API的路由和ASP.NET MVC相似,也是把路由放在RouteTable中的。可以在App_Start文件夹中的WebApiConfig.cs中设置路由模版。默认的路由模版是:

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

    ● 静态片段api,主要用来区分ASP.NET MVC的路由。
    ● 为什么没有{action}?默认情况下,可以根据惯例找到Action,只要Action的名称符合惯例。
    ● 占位符变量{id}映射Action的参数。

    二、什么是惯例路由那?

    对于GET,POST,PUT,DELETE请求,如果Action的名称以Get, Post, Put, Delete开头,这就是符合惯例,意味着在请求的url中无需指明Action,就可以路由到对应的Action中。

    假设有这样的一个api控制器:

    public class BooksController : ApiController
    {
        public void GetAllBooks(){}
        public IEnumerable<Book> GetBookById(int id)
        public HttpResponseMessage DeleteProduct(int id){}
        public HttpResponseMessage PostProduct(int id){}
        public HttpResponseMessage PutProduct(int id){}
    }

    ● 浏览器输入:api/books 并且是Get请求

    不带参数,由于GetAllBooks的名称以Get开头,符合惯例,这里会映射到GetAllBooks方法。

    ● 浏览器输入:api/books/8 并且是Get请求

    带参数,会映射到GetBookById(int id)方法上。Web API会把字符串类型的8赋值给int类型的参数变量id。

    ● 浏览器输入:api/books/8 并且是DELETE请求
    映射到DeleteProduct(int id)

    ● 浏览器输入:api/books 并且是POST请求

    映射到PostProduct(int id)

    三、根据HTTP方法路由

    HttpGet, HttpPut, HttpPost, HttpDelete属性可以打在Action上面。

    如果一个Action允许有多个HTTP方法,就使用AcceptVerbs属性。

    public class BooksController : ApiController
    {
        [HttpGet]
        public Book FindBook(id){}
        [HttpPost]
        public Book AddBook(Book book){}
        ......
        [AcceptVerbs("GET","HEAD")]
        public Books FindAll(Book book){}
    }
    通过这种方法也可以找到相应的方法执行

    四、使用action的路由

    首先修改默认路由

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

    然后在控制器中写一下样式的代码,通过api/Books/Details/id=10 可以访问details方法,api/books/TestMethod/id=10 可以访问detials2 方法

    //如果不想让Action参与到路由中,可以使用NoAction属性
     [NonAction]
        public string GetSomeData
    public class BooksController : ApiController
    {
        [HttpGet]
        public string Details(int id);
    
        [ActionName("TestMethod")]
        public string Details2(int id);
    
    }

    总结:在WebApiConfig.cs中定义的路由模版都被放到了RouteTable中了。在Action层面,如果想让请求路由到Action上,可以通过惯例、Http方法属性来实现。

     

  • 相关阅读:
    “冷面杀手”王励勤赢了
    当VS.NET 无法调试时,不妨尝试一下下面的办法
    Oracle如何调用Windows动态链接库
    根本不值得一提的乒乓球国手王浩
    向总版主提一些建议
    你的家乡话,你还知多少
    黄山三日游(200706020604)
    今天是我的生日,常怀感恩的心
    如果有一个工具可以帮助你将你的代码可视化,你需要吗?
    是社会变化太快,还是我心态有有点怪
  • 原文地址:https://www.cnblogs.com/xqdotnet/p/6699317.html
Copyright © 2020-2023  润新知