Используя Хеш-таблицы/Словари со строковыми ключами и Нечувствительным к регистру Поиском

В Startup.cs вы можете добавить аутентификацию куки, добавив эту строку (вы также можете указать параметры для продолжительности сеанса и т. Д.).

services.AddAuthentication().AddCookie();

Чтобы создать сеанс при входе с контроллера, вы можете вызвать его, чтобы войти как пользователь с набором утверждений (в основном пары ключ / значение, описывающие то, что вам нужно знать о пользователе). ):

await HttpContext.SignInAsync(userId, claims);

Это создает ClaimsPrincipal, к которому можно получить доступ через свойство User на Controller:

User.HasClaim("someclaim", "somevalue")

В конечном итоге промежуточное программное обеспечение шифрует заявки и сохраняет их в cookie, поэтому проверка подлинности все еще без сохранения состояния с точки зрения сервера. Однако имейте в виду, что используемый по умолчанию ключ шифрования привязан к машине, поэтому вам придется использовать что-то вроде azure или redis , если вы планируете масштабировать до нескольких экземпляров сервера.

Если вы хотите иметь полный логин & amp; Система управления пользователями, самый простой способ - это, вероятно, идентификация ASP.net, которая предоставляет API-интерфейсы для обработки пользователей, политик, групп доступа и некоторых хитрых вещей, таких как хранение паролей с использованием Entity Framework. Для получения дополнительной информации, проверьте это: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity?view=aspnetcore-2.2&tabs=visual-studio [ 114]


В качестве дополнительного примечания, для более общего состояния сеанса, этот документ содержит данные о других параметрах состояния сеанса, но, поскольку вы спрашивали о входах в систему, лучшим вариантом является возможно использовать API аутентификации.

17
задан Eoin Campbell 13 May 2009 в 09:32
поделиться

4 ответа

Code to make the hashtable comparisons case-insensitive

For 2.0, 3.0, 3.5

Hashtable ht = new Hashtable(StringComparer.InvariantCultureIgnoreCase);

You can get info on InvariantCultureIgnoreCase vs. OrdinalIgnoreCase on this SO link

OR

Hashtable ht = System.Collections.Specialized.CollectionsUtil.CreateCaseInsensitiveHashtable();

Because case-insensitive dictionary collection is such a common use, the .NET Framework has a CollectionUtil class that supports creating Hashtable and SortedList objects that are case insensitive. Use by calling CreateCaseInsensitiveHashtable or CreateCaseInsensitiveSortedList.

For .Net 1.0 (I am not sure if 1.0 supports StringComparer)

public class InsensitiveComparer : IEqualityComparer
{
    CaseInsensitiveComparer _comparer = new CaseInsensitiveComparer();
    public int GetHashCode(object obj)
    {
        return obj.ToString().ToLowerInvariant().GetHashCode();
    }

    public new bool Equals(object x, object y)
    {
        if (_comparer.Compare(x, y) == 0)
        {
            return true;
        }

        else
       {
           return false;
       }
    }
}

Hashtable dehash = new Hashtable(new InsensitiveComparer());
31
ответ дан 30 November 2019 в 10:39
поделиться

With a dictionary:

new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);

but simpler, I believe StringDictionary is case-insensitive too:

    StringDictionary ht = new StringDictionary();
    ht.Add("MyKey", "Details");

    string result1 = ht["MyKey"];
    string result2 = ht["MYKEY"];
    string result3 = ht["mykey"];
17
ответ дан 30 November 2019 в 10:39
поделиться

You can supply an case-insensitive IEqualityComparer to the HashTable constructor, but this requires that you can influence the HashTable construction in the 3rd party library.

If you fill the hash table from your code, you could normalize the keys on insertion and retrieve normalized keys again.

If you are unable to influence the content of the hash table, but you know the structure of the keys, you could correct the user input before accessing the hash table.

2
ответ дан 30 November 2019 в 10:39
поделиться

Это не очень эффективный способ, но вы всегда можете взять хеш-таблицу и сделать из нее StringDictionary:

Hashtable ht = new Hashtable();
ht.Add("FOO", "bar");

StringDictionary dict = new StringDictionary();

foreach(string key in ht.Keys)
    dict.Add(key, ht[key].ToString());

string result = dict["foo"]; // Assigns "bar" to result
1
ответ дан 30 November 2019 в 10:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: