相关疑难解决方法(0)

带有BaseAddress的HttpClient

我在使用HttpClientBaseAddress属性调用webHttpBinding WCF端点时遇到问题.

HttpClient的

我创建了一个HttpClient实例,将BaseAddress属性指定为本地主机端点.

在此输入图像描述

GetAsync Call

然后我调用GetAsync方法传递额外的Uri信息.

HttpResponseMessage response = await client.GetAsync(string.Format("/Layouts/{0}", machineInformation.LocalMachineName()));
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

服务端点

[OperationContract]
[WebGet(UriTemplate = "/Layouts/{machineAssetName}", ResponseFormat = WebMessageFormat.Json)]
List<LayoutsDto> GetLayouts(string machineAssetName);
Run Code Online (Sandbox Code Playgroud)

问题

我遇到的问题是,是,/AndonService.svc所述BaseAddress的一部分被截断,从而将得到的呼叫转到https://localhost:44302/Layouts/1100-00277宁可https://localhost:44302/AndonService.svc/Layouts/1100-00277导致404未找到.

是否有理由在GetAsync调用中截断BaseAddress?我该如何解决这个问题?

.net c# wcf webhttpbinding dotnet-httpclient

23
推荐指数
1
解决办法
2万
查看次数

设置`HttpClient`的`BaseAddress`属性有什么好处

我们使用HttpClient. 我正在创建一个HttpClient用于所有这些 API 调用的通用对象。我对实现这一点的两种方法感到困惑:

  1. HttpClient通过在get/post/put方法中传递 API URI,为每个调用创建一个单例类并使用它。
  2. 创建一个HttpClientHandler将在所有HttpClients之间共享的单例类,并HtppClient通过设置BaseAddress属性为每个域创建一个。现在我们可以通过在get/post/put方法中传递相对路径来调用 API 。

哪一种是更好的方法?

预设有什么好处BaseAddress吗?如果没有,为什么提供这个属性?

c# dotnet-httpclient

6
推荐指数
1
解决办法
2398
查看次数

在没有启动的情况下在较旧的ASP.NET MVC应用程序中创建HttpClient

我有一个旧版本的ASP.NET MVC应用程序没有Startup.cs.我想实现一种干净的方式,HttpClient以便我可以使用我的API调用第三方.

这是我到目前为止基于我收到的关于这个问题的一些想法/建议所做的.问题是,当我进行API调用时,它无处可去.我把它放在一个try catch但我甚至没有得到例外.API提供商告诉我他们没有看到搜索参数.

首先,我HttpClientAccessor为延迟加载创建了这个.

public static class HttpClientAccessor
{
   public static Func<HttpClient> ValueFactory = () =>
   {
      var client = new HttpClient();

      client.BaseAddress = new Uri("https://apiUrl.com");
      client.DefaultRequestHeaders.Accept.Clear();
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
      client.DefaultRequestHeaders.TryAddWithoutValidation("APIAccessToken", "token1");
      client.DefaultRequestHeaders.TryAddWithoutValidation("UserToken", "token2");

       return client;
   };

   private static Lazy<HttpClient> client = new Lazy<HttpClient>(ValueFactory);

   public static HttpClient HttpClient
   {
      get { return client.Value; }
   }
}
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个自己的API客户端,以便我可以在一个地方使用API​​调用函数,如下所示:

public class MyApiClient
{

   public async Task GetSomeData()
   {
       var client = HttpClientAccessor.HttpClient;
       try
       { …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc asp.net-mvc-4

6
推荐指数
1
解决办法
870
查看次数

httpclient.baseaddress 中的“基地址”是什么?

根据这个

https://msdn.microsoft.com/en-us/library/system.net.http.httpclient.baseaddress(v=vs.118).aspx

它包含基地址。嗯,呃……

我不知道微软的文档是否可以理解。基地址到底是什么?

是只有主机名的 URL 吗?

喜欢StackOverflow.com

是整个网址吗stackoverflow.com/question/ask

是否是包含参数的整个URL,例如stackoverflow.com/hello/world?dfdsdf=34fgdsg

什么是基地址?

vb.net

2
推荐指数
1
解决办法
9503
查看次数

HttpClient 问题,如何重用不同的 URI?

我有一个托管在 Azure(应用程序服务)上的简单 Web 应用程序,它调用两个不同的外部 API。昨天,我们的流量出现了巨大的预期峰值,整个事情崩溃了,我现在意识到这是因为我正在创建和处置 HttpClient 的新实例,如下所示:

var url = "https://www.externalapi.com/someendpoint" +
    "/takethedata.js?" +
    "[form]email=" + visitor.EmailAddress +
    "&[form]name=" + visitor.FirstName + " " + visitor.LastName +
    "&[form]zip=" + visitor.zip +
    "&[form]location=" + city + ", " + state;

using(var handler = new HttpClientHandler())
{
    handler.ClientCertificateOptions = ClientCertificateOption.Manual;
    handler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true;
    handler.SslProtocols = System.Security.Authentication.SslProtocols.Tls12 |
        System.Security.Authentication.SslProtocols.Tls11 |
        System.Security.Authentication.SslProtocols.Tls;

    using(var client = new HttpClient(handler))
    {
        client.BaseAddress = new Uri(url);
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        HttpResponseMessage response = await …
Run Code Online (Sandbox Code Playgroud)

c# dotnet-httpclient asp.net-core asp.net-core-2.0

1
推荐指数
1
解决办法
4616
查看次数