public void TimeoutTest() { var request = new HttpApiRequestMessage() { Timeout = TimeSpan.FromDays(1d) }; Assert.True(request.Timeout == TimeSpan.FromDays(1d)); }
/// <summary> /// 读取请求内容 /// </summary> /// <param name="request"></param> /// <returns></returns> private async Task <string?> ReadRequestContentAsync(HttpApiRequestMessage request) { if (request.Content == null) { return(null); } return(request.Content is ICustomHttpContentConvertable convertable ? await convertable.ToCustomHttpContext().ReadAsStringAsync().ConfigureAwait(false) : await request.Content.ReadAsStringAsync().ConfigureAwait(false)); }
public void SetCookieTest() { var cookie = "a=1; b=2"; var reqeust = new HttpApiRequestMessage(); reqeust.SetCookie(cookie); reqeust.Headers.TryGetValues("Cookie", out IEnumerable <string> values); var cookies = values.ToArray(); Assert.True(cookies.Length == 1 && cookies.First() == "a=1; b=2"); }
public void ReplaceHttpHostTest() { var request = new HttpApiRequestMessage(); Assert.Throws <ApiInvalidConfigException>(() => request.ReplaceHttpHost(new Uri("/", UriKind.Relative))); request.RequestUri = new Uri("http://webapiclient.com/a/b"); request.ReplaceHttpHost(new Uri("https://a.com")); Assert.Equal(request.RequestUri, new Uri("https://a.com/a/b")); }
public override async Task OnRequestAsync(ApiRequestContext context) { await Task.CompletedTask; IServiceProvider sp = context.HttpContext.ServiceProvider; HostProvider hostProvider = sp.GetRequiredService <HostProvider>(); //服务名也可以在接口配置时挂在Properties中 string host = hostProvider.ResolveService(this.Name); HttpApiRequestMessage requestMessage = context.HttpContext.RequestMessage; //和原有的Uri组合并覆盖原有Uri //并非一定要这样实现,只要覆盖了RequestUri,即完成了替换 requestMessage.RequestUri = requestMessage.MakeRequestUri(new Uri(host)); }
public void MakeRequestUriTest() { var request = new HttpApiRequestMessage(); var uri = request.MakeRequestUri(new Uri("a", UriKind.RelativeOrAbsolute)); Assert.Equal("a", uri.OriginalString); request = new HttpApiRequestMessage(); uri = request.MakeRequestUri(new Uri("http://a.com", UriKind.RelativeOrAbsolute)); Assert.Equal("http://a.com", uri.OriginalString); request = new HttpApiRequestMessage(); uri = request.MakeRequestUri(new Uri("http://a.com/a", UriKind.RelativeOrAbsolute)); Assert.Equal("http://a.com/a", uri.OriginalString); }
public async Task AddFormFiledAsyncTest() { var reqeust = new HttpApiRequestMessage(); await Assert.ThrowsAsync <NotSupportedException>(() => reqeust.AddFormFieldAsync("name", "value")); reqeust.Method = System.Net.Http.HttpMethod.Post; reqeust.RequestUri = new Uri("http://webapiclient.com"); await reqeust.AddFormFieldAsync("name", "laojiu"); await reqeust.AddFormFieldAsync(new[] { new KeyValue("age", "18") }); var body = await reqeust.Content.ReadAsStringAsync(); Assert.Equal("name=laojiu&age=18", body); Assert.True(reqeust.Content.Headers.ContentType.MediaType == "application/x-www-form-urlencoded"); }
public override Task OnRequestAsync(ApiRequestContext context) { var options = context.HttpContext.HttpApiOptions; //获取注册时为服务配置的服务名 options.Properties.TryGetValue("serviceName", out object serviceNameObj); string serviceName = serviceNameObj as string; IServiceProvider sp = context.HttpContext.ServiceProvider; HostProvider hostProvider = sp.GetRequiredService <HostProvider>(); string host = hostProvider.ResolveService(serviceName); HttpApiRequestMessage requestMessage = context.HttpContext.RequestMessage; //和原有的Uri组合并覆盖原有Uri //并非一定要这样实现,只要覆盖了RequestUri,即完成了替换 requestMessage.RequestUri = requestMessage.MakeRequestUri(new Uri(host)); return(Task.CompletedTask); }
/// <summary> /// 异步发送请求 /// </summary> /// <param name="request">请求消息</param> /// <returns></returns> public async Task <HttpResponseMessage> SendAsync(HttpApiRequestMessage request) { if (request.RequestUri == null) { throw new HttpApiConfigException("未配置RequestUri,RequestUri不能为null"); } try { Interlocked.Increment(ref this.pendingCount); var timeout = request.Timeout.HasValue ? request.Timeout.Value : this.Timeout; var cancellationToken = new CancellationTokenSource(timeout).Token; return(await this.client.SendAsync(request, cancellationToken)); } finally { Interlocked.Decrement(ref this.pendingCount); } }
public void AddUrlQueryTest() { var request = new HttpApiRequestMessage(); Assert.Throws <ApiInvalidConfigException>(() => request.AddUrlQuery("xKey", "xValue")); request.RequestUri = new Uri("http://webapiclient.com/"); request.AddUrlQuery("xKey", "xValue"); Assert.True(request.RequestUri == new Uri("http://webapiclient.com?xKey=xValue")); Assert.Throws <ArgumentNullException>(() => request.AddUrlQuery(null, string.Empty)); request.AddUrlQuery("yKey", "yValue"); Assert.True(request.RequestUri == new Uri("http://webapiclient.com?xKey=xValue&yKey=yValue")); var unicodeValue = Uri.EscapeDataString("老九"); request.AddUrlQuery("zKey", "老九"); var url = new Uri($"http://webapiclient.com?xKey=xValue&yKey=yValue&zKey={unicodeValue}"); Assert.True(request.RequestUri == url); }
public async Task AddFormDataTextTest() { string get(string name, string value) { return($@"Content-Disposition: form-data; name=""{name}"" {HttpUtility.UrlEncode(value, Encoding.UTF8)}"); } var reqeust = new HttpApiRequestMessage(); reqeust.Method = System.Net.Http.HttpMethod.Post; reqeust.RequestUri = new Uri("http://webapiclient.com"); reqeust.AddFormDataText("name", "laojiu"); reqeust.AddFormDataText(new[] { new KeyValue("age", "18") }); await Assert.ThrowsAsync <NotSupportedException>(() => reqeust.AddFormFieldAsync("key", "value")); var body = await reqeust.Content.ReadAsStringAsync(); Assert.Contains(get("name", "laojiu"), body); Assert.Contains(get("age", "18"), body); Assert.True(reqeust.Content.Headers.ContentType.MediaType == "multipart/form-data"); }
public void AddUrlQueryTest() { var request = new HttpApiRequestMessage(); Assert.Throws <HttpApiInvalidOperationException>(() => request.AddUrlQuery("xKey", "xValue")); request.RequestUri = new Uri("http://webapiclient.com/"); request.AddUrlQuery("xKey", "xValue"); Assert.True(request.RequestUri == new Uri("http://webapiclient.com?xKey=xValue")); Assert.Throws <ArgumentNullException>(() => request.AddUrlQuery(null, string.Empty)); var kv = new KeyValue("yKey", "yValue"); request.AddUrlQuery(kv); Assert.True(request.RequestUri == new Uri("http://webapiclient.com?xKey=xValue&yKey=yValue")); var unicodeValue = HttpUtility.UrlEncode("老九", Encoding.UTF8); request.AddUrlQuery(new[] { new KeyValue("zKey", "老九") }, Encoding.UTF8); var url = new Uri($"http://webapiclient.com?xKey=xValue&yKey=yValue&zKey={unicodeValue}"); Assert.True(request.RequestUri == url); }