亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

【譯】ASP.NET Web API :Web宿主

2019-11-17 01:26:13
字體:
來源:轉載
供稿:網友

【譯】asp.net Web API :Web宿主

上一節描述了API的整個運行框架,即分為三層hosting、message handler pipeline 和 controller handling。此節講其中一個宿主,WebHost 寄宿在asp.net 傳統管道上。

Routing(路由)

在asp.net平臺,路由是一般由RouteTables.Routes靜態屬性添加的,類型是RouteCollection,例如下面的MVC模板自帶的添加路由的代碼。

PRotected void application_Start(){    RegisterRoutes(RouteTable.Routes);} public static void RegisterRoutes(RouteCollection routes){    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");     routes.MapRoute(        "Default", // Route name        "{controller}/{action}/{id}", // URL with parameters        new { controller = "Home", action = "Index", id = UrlParameter.Optional }     );}

大部分路由邏輯都是在UrlRoutingModule里,屬于PostResolveRequestCache asp.net管道事件。每一次請求,這個module都是重新匹配一次這個路由集合,并獲取一個RouteData實例,如果匹配,則:

1、實例化RouteData同時獲取一個route handler(HttpControllerRouteHandler)。

2、從routehandler獲取一個http handle 繼承自IHttphandler接口。IRouteHandler接口方法:IHttpHandler GetHttpHandler(RequestContext requestContext)

3、最后,當前的請求上下文(RequestContext)被映射到上面的這個httphandler。

因此,最后結果是asp.net管道請求被此handler處理。

Web API 集成

當寄宿在asp.net上,Web API特定的配置被定義在一個單例模式的HttpConfiguration對象里,通過靜態屬性GlobalCnfiguration.Configuration訪問。

Web API 也定義了一對新的RouteCollection擴展方法MapHttpRoute,來注冊Web API特殊的路由,下面是配置的例子代碼:

HttpConfiguration config = GlobalConfiguration.Configuration;config.Routes.MapHttpRoute("default", "{controller}/{id}",  new {id = UrlParameter.Optional});// other configuration settings

注意:

  1. 靜態屬性GlobalConfiguration.Configuration是用于獲取配置的引用,內部這個對象指向的是全局的RouteTables.Routes這個集合。
  2. 當新增路由時使用的是MapHttpRoute這個擴展方法。

當一個route通過MapHttpRoute增加后匹配到一個Request,,HttpControllerRouteHandler會創建一個新的HttpControllerHandler,其繼承自IAsyncHttpHandler,此handler通過RouteData(包含了路由的信息)初始化。

當被調用,HttpControllerhandler 在他的BeginReocessRequest方法里有以下行為:

  • 為當前上下文創建HttpRequestMessage實例
  • 使用GlobalConfiguration.Configuration獲取配置并創建一個HttpServer,并且把HttpRequestMessage送入服務管道。

當這個請求被HttpServer接受后,進入宿主的獨立處理階段(Web API的新管道)

下面的類圖是路由解決過程的摘要,并且分配給HttpServer(消息處理管道)

原文地址:

ASP.NET Web API: webhosting

看文字描述比較晦澀難懂,需要根據源碼理解,上圖容易理解。

HttpApplication -> UrlRoutingModule -> RouteCollection -> RouteData -> HttpControllerRouteHandler -> HttpControllerHandler -> HttpRequestMessage -> HttpServer

附加一些源碼:1、UrlRoutingModule獲取RouteData

public virtual void PostResolveRequestCache(HttpContextBase context){    RouteData routeData = this.RouteCollection.GetRouteData(context);    if (routeData == null)    {        return;    }    IRouteHandler routeHandler = routeData.RouteHandler;    if (routeHandler == null)    {        throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, SR.GetString("UrlRoutingModule_NoRouteHandler"), new object[0]));    }    if (routeHandler is StopRoutingHandler)    {        return;    }    RequestContext requestContext = new RequestContext(context, routeData);    context.Request.RequestContext = requestContext;    IHttpHandler httpHandler = routeHandler.GetHttpHandler(requestContext);    if (httpHandler == null)    {        throw new InvalidOperationException(string.Format(CultureInfo.CurrentUICulture, SR.GetString("UrlRoutingModule_NoHttpHandler"), new object[]        {            routeHandler.GetType()        }));    }    if (!(httpHandler is UrlAuthFailureHandler))    {        context.RemapHandler(httpHandler);        return;    }    if (FormsAuthenticationModule.FormsAuthRequired)    {        UrlAuthorizationModule.ReportUrlAuthorizationFailure(HttpContext.Current, this);        return;    }    throw new HttpException(401, SR.GetString("Assess_Denied_Description3"));}
View Code

2、MapHttpRoute(RouteCollectionExtension)

public static Route MapHttpRoute(this RouteCollection routes, string name, string routeTemplate, object defaults, object constraints, HttpMessageHandler handler){    if (routes == null)    {        throw Error.ArgumentNull("routes");    }    HttpRouteValueDictionary defaultsDictionary = new HttpRouteValueDictionary(defaults);    HttpRouteValueDictionary constraintsDictionary = new HttpRouteValueDictionary(constraints);    HostedHttpRoute httpRoute = (HostedHttpRoute)GlobalConfiguration.Configuration.Routes.CreateRoute(routeTemplate, defaultsDictionary, constraintsDictionary, dataTokens: null, handler: handler);    Route route = httpRoute.OriginalRoute;    routes.Add(name, route);    return route;}
View Code

3、HttpControllerRouteHandler.GetHandler

protected virtual IHttpHandler GetHttpHandler(RequestContext requestContext){    return new HttpControllerHandler(requestContext.RouteData);}
View Code

4、HttpControllerHandler.ProcessRequest

internal async Task ProcessRequestAsyncCore(HttpContextBase contextBase){    HttpRequestMessage request = contextBase.GetHttpRequestMessage() ?? ConvertRequest(contextBase);    // Add route data    request.SetRouteData(_routeData);    CancellationToken cancellationToken = contextBase.Response.GetClientDisconnectedTokenWhenFixed();    HttpResponseMessage response = null;    try    {        response = await _server.SendAsync(request, cancellationToken);        await CopyResponseAsync(contextBase, request, response, _exceptionLogger.Value, _exceptionHandler.Value,            cancellationToken);    }    finally    {        // The other HttpTaskAsyncHandler is HttpRouteExceptionHandler; it has similar cleanup logic.        request.DisposeRequestResources();        request.Dispose();        if (response != null)        {            response.Dispose();        }    }}
View Code

5、HttpApplication -> HttpControllerHandler

public HttpControllerHandler(RouteData routeData)    : this(routeData, GlobalConfiguration.DefaultServer){}public HttpControllerHandler(RouteData routeData, HttpMessageHandler handler){    if (routeData == null)    {        throw Error.ArgumentNull("routeData");    }    if (handler == null)    {
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美日韩一区在线| 欧美精品一区在线播放| 亚洲免费一在线| 欧美—级a级欧美特级ar全黄| 日韩av网站电影| 欧美不卡视频一区发布| 日本精品免费一区二区三区| 欧美日韩午夜视频在线观看| 日韩福利在线播放| 国产精品成人v| 国产专区欧美专区| 国产丝袜精品第一页| 不卡av电影院| 国产精品视频一区二区高潮| 亚洲精品免费一区二区三区| 热草久综合在线| 国产综合色香蕉精品| 日韩美女免费观看| 国产日韩亚洲欧美| 国产精品久久久久久av福利| 亚洲色图美腿丝袜| 欧美一区三区三区高中清蜜桃| 91精品视频一区| 操日韩av在线电影| 精品国内自产拍在线观看| 欧美另类69精品久久久久9999| 一区二区欧美亚洲| 亚洲白拍色综合图区| 欧美视频在线视频| 91国产精品电影| 中文字幕亚洲欧美日韩2019| 精品久久久久久久久久久久久| 成人乱人伦精品视频在线观看| 日韩在线观看成人| 国产精品青草久久久久福利99| 亚洲精品成a人在线观看| 国产亚洲欧美日韩精品| 91亚洲精华国产精华| 久久久影视精品| 伊人久久久久久久久久久久久| 亚洲丝袜在线视频| 青草青草久热精品视频在线网站| 亚洲变态欧美另类捆绑| 欧美电影免费观看高清完整| 4p变态网欧美系列| 成人在线视频网| 久久99国产综合精品女同| 激情懂色av一区av二区av| 国外成人在线视频| 亚洲精品一区二区久| 国产脚交av在线一区二区| 久久精品电影网| 亚洲第一网站男人都懂| 中文字幕综合一区| 国产精品v片在线观看不卡| 性色av一区二区三区免费| 欧美激情欧美激情| 亚洲**2019国产| 国产一区二区三区四区福利| 欧美猛少妇色xxxxx| 亚洲国产精品国自产拍av秋霞| 国产色婷婷国产综合在线理论片a| 亚洲第一精品久久忘忧草社区| 91久久精品在线| 亚洲天堂av高清| 亚洲的天堂在线中文字幕| 亚洲xxx自由成熟| 日韩成人av在线播放| 久久久www成人免费精品| 免费av在线一区| 欧美大尺度电影在线观看| 欧美理论电影网| 国产日韩欧美成人| 91国在线精品国内播放| xxxxx91麻豆| 国产精品一区二区三区在线播放| 精品国产福利视频| 中文字幕精品在线视频| 亚洲精品网站在线播放gif| 亚洲自拍小视频| 97在线视频免费| 性欧美长视频免费观看不卡| 亚洲free嫩bbb| 国产成人精品日本亚洲专区61| 亚洲春色另类小说| 亚洲天堂久久av| 日韩中文字幕在线| 久操成人在线视频| 精品国产欧美一区二区三区成人| 欧美极品美女视频网站在线观看免费| 欧美性猛交xxxx久久久| 成人欧美在线观看| 久久天堂av综合合色| 精品高清一区二区三区| 日本精品久久中文字幕佐佐木| 日韩中文视频免费在线观看| 欧美黑人xxxⅹ高潮交| 日韩中文字幕精品视频| 欧美大胆a视频| 国内揄拍国内精品少妇国语| 日韩在线播放一区| 狠狠爱在线视频一区| 久久久人成影片一区二区三区观看| 亚洲第一区中文99精品| 欧美激情久久久| 97av在线视频免费播放| 久久久综合免费视频| 国产中文字幕91| 97在线观看视频| 亚洲自拍欧美色图| 欧美另类暴力丝袜| 国产日韩欧美视频| 一区二区中文字幕| 91亚洲人电影| 韩国国内大量揄拍精品视频| 久久久精品日本| 欧美激情亚洲精品| 91国产高清在线| 91久久中文字幕| 成人黄色免费看| 亚洲精品视频二区| 日韩av大片在线| 国产精品久久久久久久久久久久久久| 色综合久久中文字幕综合网小说| 国产精品视频网址| 69国产精品成人在线播放| 色综合久久悠悠| 日韩精品一区二区三区第95| 91国产精品91| 中文字幕精品久久久久| 亚洲已满18点击进入在线看片| 久久精品电影一区二区| 国产91色在线|免| 欧美极品欧美精品欧美视频| 午夜精品美女自拍福到在线| 国产精品吹潮在线观看| 久久久最新网址| 国产精品久久久久77777| 欧美亚洲另类在线| 91高清视频免费观看| 日韩av网站大全| 国产成人在线精品| 精品av在线播放| 国产一区二区日韩精品欧美精品| 最近2019中文字幕在线高清| 中文字幕亚洲无线码在线一区| 尤物九九久久国产精品的特点| 国产精品男女猛烈高潮激情| 97视频国产在线| 国产亚洲欧美日韩精品| 亚洲男人天堂古典| 美女999久久久精品视频| 欧美裸体xxxx极品少妇软件| 日本欧美精品在线| 国产精品1234| 亚洲美女视频网| 亚洲2020天天堂在线观看| 亚洲永久免费观看| 国产精品久久国产精品99gif| 亚洲精品理论电影| 亚洲成人久久电影| 亚洲乱码国产乱码精品精| 国产亚洲视频在线观看| 色天天综合狠狠色|