zoukankan      html  css  js  c++  java
  • WebApi单元测试记录

    一、MessageHandler不一定是全局的,也可以只应用到指定的Router上
    1、定义一个handler
    // Pipelines
    HttpMessageHandler affiliateShipmentsPipeline =
    HttpClientFactory.CreatePipeline(
    new HttpControllerDispatcher(config),
    new[] { new AffiliateShipmentsDispatcher() });
     
    2、将handler应用在指定的router上
    // Routes
    routes.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;
    }
    }
  • 相关阅读:
    TCP/IP,HTTP,HTTPS,WEBSocket协议
    mysql优化
    PHP基础算法
    php----函数大全
    面试题总结101-)
    扫描一个目录下的所有文件,根据这些文件的创建日期生成一个文件夹,然后把这些文件移入这个文件夹下面
    对执行文件下的文件按照时间
    [合集]解决Python报错:local variable 'xxx' referenced before assignment
    python 函数私有方法
    去哪儿面试题- 一组描述由人组成的网络的测试用例校验是否联通
  • 原文地址:https://www.cnblogs.com/gossip/p/4512418.html
Copyright © 2011-2022 走看看