Произошло необработанное исключение: неправильно сформированный URL в режиме выпуска в приложении .net core 2.0 - PullRequest
0 голосов
/ 13 июня 2018

У меня есть приложение .net core 2.0, которое использует IdentityServer 4 .он отлично работает в режиме разработки .Затем я опубликовал его для производственного режима и протестировал.когда я щелкаю (у этого действия есть метод для создания accesstoken ), я получаю сообщение об ошибке, как показано ниже:

Произошло необработанное исключение: неправильный URL

, тогда здесь возникает ошибка в режиме производства (версия ):

var disco = await IdentityModel.Client.DiscoveryClient.GetAsync(_configuration.GetSection("Settings").GetSection("DiscoveryClient").Value);

выше DiscoveryClient равно http, а не https, вот полное описание ошибки..

Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[0]
      An unhandled exception has occurred: Malformed URL
System.InvalidOperationException: Malformed URL
   at IdentityModel.Client.DiscoveryClient.ParseUrl(String input)
   at IdentityModel.Client.DiscoveryClient..ctor(String authority, HttpMessageHandler innerHandler)
   at IdentityModel.Client.DiscoveryClient.<GetAsync>d__1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()

это потому что https.Я понятия не имею, что происходит. Надеюсь, ваша помощь с этим.

1 Ответ

0 голосов
/ 15 сентября 2018

Вот фрагмент кода из DiscoveryClient ParseUrl, показывающий, когда он выдает это исключение:

public static DiscoveryEndpoint ParseUrl(string input)
{
    var success = Uri.TryCreate(input, UriKind.Absolute, out var uri);
    if (success == false)
    {
        throw new InvalidOperationException("Malformed URL");
    }

    if (!DiscoveryEndpoint.IsValidScheme(uri))
    {
        throw new InvalidOperationException("Malformed URL");
    }

Вот код для DiscoveryEndpoint IsValidScheme метод:

public static bool IsValidScheme(Uri url)
{
    if (string.Equals(url.Scheme, "http", StringComparison.OrdinalIgnoreCase) ||
        string.Equals(url.Scheme, "https", StringComparison.OrdinalIgnoreCase))
    {
        return true;
    }

    return false;
}

Исходя из этого, исключение не генерируется, поскольку URL использует http.

Попробуйте позвонить

new Uri(_configuration.GetSection("Settings").GetSection("DiscoveryClient").Value, UriKind.Absolute)

перед вызовом IdentityModel.Client.DiscoveryClient.GetAsync ', чтобы увидеть, какое исключение выдается конструктором Uri.

...