Получить часть URL после '#' хеша в C # - PullRequest
0 голосов
/ 05 июня 2018

Я следую этому руководству до последнего шага, когда мне нужно получить токен доступа из URL.Но он добавляется после символа #, и я не знаю, как получить эту часть URL.Кто-то, пожалуйста, скажите мне код, который работает, или, возможно, другой способ получить эту информацию.

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Ниже программа использует Regex, у нас есть входы и выходы, используя фрагменты URL в C #.

using System;

namespace Solutions
{
    using System.Text.RegularExpressions;

    class Program
    {
        static void Main()
        {
            const string RedirectUrl = "https://www.example.com/cb#access_token=bHLgV4q6--&token_type=bearer&xoauth_yahoo_guid=JTDI2OCE&state=XYZ";

            // Create Uri
            var uriAddress = new Uri(RedirectUrl);

            if (string.IsNullOrEmpty(uriAddress.Fragment))
            {
                Console.WriteLine("Null Fragment");
                return;
            }
            Console.WriteLine(uriAddress.Fragment);

            // To get complete appended Access code
            Console.WriteLine(uriAddress.Fragment.Substring(uriAddress.Fragment.IndexOf("#", StringComparison.CurrentCultureIgnoreCase)));

            // Apply Regex to get matches
            var regex = new Regex("([^?=&]+)(=([^&]*))?");
            var matches = regex.Matches(uriAddress.Fragment);
            foreach (Match match in matches)
            {
                var keyValueSplit = match.Value.Split(new[] { '=' }, 2, StringSplitOptions.None);
                Console.WriteLine(keyValueSplit[0] + " = " + keyValueSplit[1]);
            }

            Console.ReadLine();
        }
    }
}

Вывод:

# access_token = bHLgV4q6- & token_type = bearer & xoauth_yahoo_guid = JTDI2OCE & state = XYZ

# access_token = bHLgV4q6 - & token_type = bearer & xoauth_yahoo_guid = JTDI2OCE & state = XYZ

* 132 * * * 82 * * * 821015 *

xoauth_yahoo_guid = JTDI2OCE

состояние = XYZ

0 голосов
/ 05 июня 2018

Вам понадобится фрагмент .

var fragment = new Uri("http://www.example.com/test#myfragment").Fragment;
Console.WriteLine(fragment);
Console.WriteLine(!string.IsNullOrEmpty(fragment) ? fragment.SubString(1) : string.Empty);

Попробуйте онлайн

Затем вы можете извлечь токен доступа:

  1. Получить фрагмент
  2. Удалить #
  3. Разделить его на &
  4. Разделить каждую пару на =
  5. Найдите пару с ключом «acces_token»
  6. Назначьте пару для accessToken или сгенерируйте исключение, если оно не найдено.

-

var fragment = new Uri("https://www.example.com/cb#access_token=bHLgV4q6--&token_type=bearer&xoauth_yahoo_guid=JTDI2OCE&state=XYZ").Fragment;
if (string.IsNullOrEmpty(fragment))
{
    throw new Exception("Access token not found.");
}
fragment = fragment.Substring(1);

var accessToken = fragment.Split(new[] { "&" }, StringSplitOptions.RemoveEmptyEntries)
                .Select(p => p.Split('='))
                .FirstOrDefault(p => p.Length == 2 && p[0] == "access_token")?[1]
                    ?? throw new Exception("Access token not found");
...