標籤:
一、MessageHandler不一定是全域的,也可以只應用到指定的Router上
1、定義一個handler// PipelinesHttpMessageHandler affiliateShipmentsPipeline =HttpClientFactory.CreatePipeline(new HttpControllerDispatcher(config),new[] { new AffiliateShipmentsDispatcher() }); 2、將handler應用在指定的router上// Routesroutes.MapHttpRoute("AffiliateShipmentsHttpRoute","api/affiliates/{key}/shipments/{shipmentKey}",defaults: new { controller = "AffiliateShipments", shipmentKey = RouteParameter.Optional },constraints: new { key = new GuidRouteConstraint(), shipmentKey = new GuidRouteConstraint() },handler: affiliateShipmentsPipeline);
二、HttpRequest頭添加Authorization資訊
HttpRequestMessage request = ConstructRequest(httpMethod, uri, mediaTypes);request.Headers.Authorization = new AuthenticationHeaderValue("Basic",EncodeToBase64(string.Format("{0}:{1}", username, password))); private static string EncodeToBase64(string value) {byte[] toEncodeAsBytes = Encoding.UTF8.GetBytes(value);return Convert.ToBase64String(toEncodeAsBytes);}
三、類比非同步發送Http請求
internal static async Task<HttpResponseMessage> GetResponseAsync(HttpConfiguration config, HttpRequestMessage request) { using (var httpServer = new HttpServer(config))using (var client = HttpClientFactory.Create(innerHandler: httpServer)) { return await client.SendAsync(request);}}
四、類比WebApi HttpRequestMessage的Content
request.Content = new ObjectContent<ShipmentRequestModel>(shipmentRequestModel, new System.Net.Http.Formatting.JsonMediaTypeFormatter());
五、HttpRequestMessage對象擷取依賴注入介面
internal static class HttpRequestMessageExtensions { internal static IShipmentService GetShipmentService(this HttpRequestMessage request) { return request.GetServic e<IShipmentService>();} internal static IMembershipService GetMembershipService(this HttpRequestMessage request) { return request.GetService<IMembershipService>();} private static TService GetService<TService>(this HttpRequestMessage request) { IDependencyScope dependencyScope = request.GetDependencyScope();TService service = (TService)dependencyScope.GetService(typeof(TService)); return service;}}
WebApi單元測試記錄