В 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 аутентификации.
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());
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"];
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.
Это не очень эффективный способ, но вы всегда можете взять хеш-таблицу и сделать из нее 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