【问题标题】:GetDiscoveryDocumentAsync: "An invalid request URI was provided. The request URI must either be an absolute URI or BaseAddress must be set."GetDiscoveryDocumentAsync:“提供了无效的请求 URI。请求 URI 必须是绝对 URI 或必须设置 BaseAddress。”
【发布时间】:2021-09-30 12:20:42
【问题描述】:

我已经检查了关于 SO 的大部分问题,但没有找到我的答案。

我正在尝试从身份服务器获取 JWT 令牌。

方法如下:

  var discoveryDocument = new DiscoveryDocumentRequest
            {
                Address = "https://admin.blabla.app:5000/",
                Policy =
                {
                    RequireHttps = false
                }
            };

  var auth = httpClient.GetDiscoveryDocumentAsync(discoveryDocument).Result;

我得到的错误是An invalid request URI was provided. The request URI must either be an absolute URI or BaseAddress must be set.

DiscoveryDocumentRequest

{
    "Policy": {
        "LoopbackAddresses": [
            "localhost",
            "127.0.0.1"
        ],
        "Authority": "https://admin.blabla.app:5000",
        "AuthorityValidationStrategy": {},
        "RequireHttps": false,
        "AllowHttpOnLoopback": true,
        "ValidateIssuerName": true,
        "ValidateEndpoints": true,
        "EndpointValidationExcludeList": [],
        "AdditionalEndpointBaseAddresses": [],
        "RequireKeySet": true
    },
    "Address": "https://admin.blabla.app:5000/",
    "ClientId": null,
    "ClientSecret": null,
    "ClientAssertion": {
        "Type": null,
        "Value": null
    },
    "ClientCredentialStyle": 1,
    "AuthorizationHeaderStyle": 0,
    "Parameters": [],
    "Version": {
        "Major": 1,
        "Minor": 1,
        "Build": -1,
        "Revision": -1,
        "MajorRevision": -1,
        "MinorRevision": -1
    },
    "Content": null,
    "Method": {
        "Method": "GET"
    },
    "RequestUri": null,
    "Headers": [
        {
            "Key": "Accept",
            "Value": [
                "application/json"
            ]
        }
    ],
    "Properties": {}
}

此代码在 Windows 服务上。

有趣的事实:相同的代码适用于不同的 Windows 机器。为什么?可能是什么问题?

【问题讨论】:

  • 嗨 @Gerald,检查 HttpClient 的 source code 表明如果提供的 uri 为 null 并且 httpclient 的 BaseAddress 属性为 null,或者提供的 uri 是相对 uri 并且 BaseAdress属性为空。所以我认为在你的代码(或 IdentityModel 的代码)的某个地方,HttpClient 正在接收一个空 uri 或一个相对 uri,而 BaseAdress 属性为空。
  • 您能否分享错误的完整堆栈跟踪。它可能有助于查明问题的根源并确定它是您的代码还是 IdentityModel 的代码的问题。
  • 嗨@Gerald Hughes,从错误消息看来,请求网址不正确。我想你可以先用 fiddler 来检查请求的 url。
  • 根据您共享的 DiscoveryDocumentRequest,“RequestUri”为空。不确定调用它时 httpClient 的“BaseAddress”字段是否有值。如果 httpClient.BaseAddress 也没有值,那么肯定会抛出错误,因为在评估期间会发现 'RequestUri' 和 BaseAddress 都为 null。

标签: c# .net windows-services asp.net-core-webapi identityserver4


【解决方案1】:

参考这个sample,请写:

 var client = new HttpClient();

            var disco = await client.GetDiscoveryDocumentAsync("https://admin.blabla.app:5000/");
            if (disco.IsError)
            {
                Console.WriteLine(disco.Error);
                return;
            }

请检查您的网址https://admin.blabla.app:5000/您的错误与您的网址有关您可以通过https://demo.identityserver.io/测试您的代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 2020-01-07
    • 2019-01-15
    • 2021-07-30
    • 2018-10-01
    • 2017-08-21
    • 1970-01-01
    相关资源
    最近更新 更多