Skip to content

Instantly share code, notes, and snippets.

View milovidov983's full-sized avatar
🤗
iii

Milovidov Vasya milovidov983

🤗
iii
View GitHub Profile
@milovidov983
milovidov983 / CustomJwtHendler.cs
Created September 2, 2019 14:15
Custom api token example
public class ApiKeyAuthOpts : AuthenticationSchemeOptions {
public string Secret { get; set; }
}
public class CustomJwtHendler : AuthenticationHandler<ApiKeyAuthOpts> {
public CustomJwtHendler(IOptionsMonitor<ApiKeyAuthOpts> options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock)
: base(options, logger, encoder, clock) {
}
public static class TaskHelper {
public static void SafeRun(Func<Task> action, HttpContext httpContext = null) {
Task.Run(async () => {
try {
await action.Invoke();
} catch (Exception e) {
var requestInfo = httpContext?.GetRequestInfos() ?? new Dictionary<string, object>();
Rollbar.RollbarLocator.RollbarInstance.Error(e, requestInfo);
}
});
using System;
namespace Fias.Contracts {
/// <summary>
/// Получение данных о списке домов, зарегистрированных за указанных адресным объектом
/// </summary>
public class GetHouse {
/// <summary>
/// fias.getHouses.rpc
/// </summary>
var errorMsg = ctx.Errors.Aggregate(
new StringBuilder(ctx.StatusCode + Environment.NewLine),
(sb, e) => sb.AppendLine(e.Message)
).ToString();
if (ctx.Message.IsRpcMessage()) {
await Hub.SetRpcErrorAsync(ctx.Message, errorMsg, (int)ctx.StatusCode);
}
#pragma warning disable 4014
@milovidov983
milovidov983 / HasValue.AndQuery.cs
Created November 23, 2018 07:36
Расширение bool типа для части запроса к базе
public static string AndQuery (this bool condition, string query) =>
condition ? $" and {query} " : string.Empty;
@milovidov983
milovidov983 / Task.WhenAll.VariousTypes.cs
Last active November 23, 2018 07:26
Объединение нескольких разнотипных тасков в один await Task.WhenAll
await Task.WhenAll(Enumerable.Empty<Task>().Union(bpTasks).Union(spTasks).Union(cpTasks));
@milovidov983
milovidov983 / NotificationExtensions.cs
Created October 15, 2018 11:18
TimeSpan в человекопонятный вид
public static string Stringify(this TimeSpan duration) {
var result = new System.Text.StringBuilder();
int count;
if (duration.TotalDays >= 1.0) {
count = (int)duration.TotalDays;
result.Append(count).Append(" ").Append(count.GetEnding("день", "дня", "дней"));
}
if (duration.Hours >= 1.0) {
count = (int)duration.Hours;
result.Append(" ").Append(count).Append(" ").Append(count.GetEnding("час", "часа", "часов"));
@milovidov983
milovidov983 / ConvertStringToUtf8Bom.cs
Created August 14, 2018 13:49
How to convert UTF-8 to UTF-8 with BOM c# string
private string ConvertStringToUtf8Bom(string source) {
var data = Encoding.UTF8.GetBytes(source);
var result = Encoding.UTF8.GetPreamble().Concat(data).ToArray();
var encoder = new UTF8Encoding(true);
return encoder.GetString(result);
}
@milovidov983
milovidov983 / SelectMany3.cs
Created August 5, 2018 09:30
Enumerator.SelectMany
class PetOwner
{
public string Name { get; set; }
public List<string> Pets { get; set; }
}
public static void SelectManyEx3()
{
PetOwner[] petOwners =
{ new PetOwner { Name="Higa",
@milovidov983
milovidov983 / RuDateAndMoneyConverter.cs
Created June 9, 2018 06:17
Класс переводет циферную форму даты или денег в словарную
public enum TextCase { Nominative/*Кто? Что?*/, Genitive/*Кого? Чего?*/, Dative/*Кому? Чему?*/, Accusative/*Кого? Что?*/, Instrumental/*Кем? Чем?*/, Prepositional/*О ком? О чём?*/ };
public static class RuDateAndMoneyConverter
{
static string[] monthNamesGenitive = { "", "января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря" };
static string zero = "ноль";
static string firstMale = "один";
static string firstFemale = "одна";
static string firstFemaleAccusative = "одну";