zoukankan      html  css  js  c++  java
  • Web Api(3)

    Web API中的路由。

    路由机制会把一个请求的URL映射到一个Controller上面的Action。这一点很关键。也就说你发送一个Http请求,MVC框架会解析这个请求的URL,之后尝试把它去映射到一个Controller的Action上。

    在ASP.NET CORE 3.0中,有两个路由中间件。中间件理解为http请求会穿越这些使用的配置。

    在Startup的Configure中。

    app.UseRouting(); 这个中间件的作用是标记路由决策在请求管道里发生的位置,即选择端点。

    app.UseEndpoints();这个中间件的作用是标记选择好的端点在请求管道什么地方来执行

    路由有两种方式进行设置,基于属性更加适合Web API。

    app.UseEndpoints(endpoints =>
    {
    endpoints.MapControllers();
    });

    上面的代码仅仅映射了Controller没有使用任何约定。

    这里就需要使用属性和URL模板了。

    属性:例如[Route],[HttpGet],[HttpPost],我喜欢放在Action上面。

    URL模板:结合属性就可以把请求正确的映射到Controller的Action上面。

    补充Endpoints(以下引用杨旭老师 草根专栏 讲的非常清楚了)

    Endpoint是什么?

    Endpoint理解为一些类 它包装一个方法可以实现实例化一个Controller并执行选中的Action方法。

    在Endpoint Routing 路由系统里,其实一共有两个中间件。

    1.Endpoint Routing 中间件。它决定了在程序中注册的哪个Endpoint应该用来处理请求。

    2.Endpoint 中间件。它是用来执行选中的Endpoint,从而让其生成响应的。

    Endpoint Routing的流程图大致如下

    以上仍然不清楚可以看整个响应的流程图

    这个类里面有一个叫做CreateEndpoints()的方法,它会获取所有Controller的Action方法。

    然后针对每个Action方法,它会创建一个Endpoint实例。这些Endpoint的实例就是包装了Controller和Action方法执行的请求委托(Request Delegate)。

    同时ControllerActionEndpointDataSource里面包存储着在应用程序里注册的路由模板。

    而针对每个Endpoint,它要么与某个按约定的路由模板相关联,要么与某个Controller Action上的Attribute路由信息相关联。而这些路由在稍后就会被用来将Endpoint与进来的请求进行匹配。

    第一个HTTP请求进来的时候,Endpoint Routing中间件就会把请求映射到一个Endpoint上。它会使用App启动时创建好的EndpointDataSource,用它来遍历查找所有可用的Endpoint,并检查和它关联的路由以及元数据,以便找到最匹配的Endpoint。

    一旦某个Endpoint实例被选中,它就会被附加在请求的对象上,这样它就可以被后续的中间件所使用了。

    最后在管道的尽头,当 Endpoint中间件运行的时候,它就会执行Endpoint所关联的请求委托。这个请求委托就会触发和实例化选中的Controller和Action方法,并产生响应。最后响应再从中间件管道原路返回。

  • 相关阅读:
    flock对文件锁定读写操作的问题 简单
    hdu 2899 Strange Fuction(二分)
    hdu 2199 Can you solve this equation? (二分)
    poj 3080 Blue Jeans (KMP)
    poj 2823 Sliding Window (单调队列)
    poj 2001 Shortest Prefixes (trie)
    poj 2503 Babelfish (trie)
    poj 1936 All in All
    hdu 3507 Print Article (DP, Monotone Queue)
    fzu 1894 志愿者选拔 (单调队列)
  • 原文地址:https://www.cnblogs.com/cdjbolg/p/12057200.html
Copyright © 2011-2022 走看看