【问题标题】:UriFormatException: Invalid URI: The hostname could not be parsed. MVC API C#UriFormatException:无效的 URI:无法解析主机名。 MVC API C#
【发布时间】:2023-03-20 20:22:01
【问题描述】:

我正在尝试创建我的 Web 应用程序并且我想连接到 API。我的Startup.cs 文件中有基地址:

services.AddHttpClient("API Client", client =>
{
    client.BaseAddress = new Uri("https://icanhazdadjoke.com/");
    client.DefaultRequestHeaders.Add("Accept", "application/json");
});

但现在我想在程序中通过在 url 地址中添加 /search 来更改它。我正在使用UriBuilder,它看起来像这样:

string responseBody = "";
var client = _httpClientFactory.CreateClient("API Client");
var builder = new UriBuilder(client.GetAsync("") + "/search");
var query = HttpUtility.ParseQueryString(builder.Query);
query.Add("term", searchedTerm);
query.Add("limit", jokesPerPage);

builder.Query = query.ToString();
string url = builder.ToString();
responseBody = await client.GetStringAsync(url);
return JsonConvert.DeserializeObject<JokeModel>(responseBody);

我遇到了一个错误:

UriFormatException:无效的 URI:无法解析主机名。

我该如何解决这个问题?

【问题讨论】:

  • 服务器是安全的 (https) 还是不安全的 (http)?如果安全,您将无法通过 SSL/TLS 认证。

标签: c# api uribuilder


【解决方案1】:

GetAsync 执行 GET 请求,而您可能想使用客户端的 BaseAddress 作为初始 Uri 来构造:

var builder = new UriBuilder(client.BaseAddress);
builder.Path = "/search";
var query = HttpUtility.ParseQueryString(builder.Query);
query.Add("term", searchedTerm);
query.Add("limit", jokesPerPage);

builder.Query = query.ToString();
string url = builder.ToString();

【讨论】:

    猜你喜欢
    • 2011-05-11
    • 2011-02-18
    • 2016-01-28
    • 2023-03-09
    • 1970-01-01
    • 2017-08-04
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多