• Как правильно в ASP .NET и EF организовать обновление объекта?

    @dmitrievMV
    Для этих целей можно использовать automapper. https://github.com/AutoMapper/AutoMapper
    Ответ написан
    Комментировать
  • Как зарегистрироваться на codewars?

    @dmitrievMV
    У них были траблы с регистрацией через c#, сам сталкивался.
    Решается вроде чисткой кук или сменой браузера, не уверен. Можно пройти регу через другой язык а потом выставить каты по шарпу.
    Ответ написан
    Комментировать
  • Как ввести пароль к базе данных MS Access из непечатных символов из кода на C#?

    @dmitrievMV
    Функция Chr конвертирует целое число IntValue или в AnsiChar или в WideChar


    string _pass = Encoding.ASCII.GetString(new byte[] { 27, 8, 30, 23, 31, 22, 2, 24, 127 });
    Ответ написан
  • Представления (View) в ASP.NET должен разрабатывать из чистой верстки фронтендер или бекенд-программист?

    @dmitrievMV
    (тот кто верстает сайт по макету и отдает чистую html верстку)

    Это обычно называется "верстальщик" и с фронтендом имеет мало общего. В таком случае обычно верстальщик верстает по макету и отдает чистый html с тестовыми данными а разработчик "натягивает" верстку. После этого если требуется подправить верстку то верстальщик меняет стили, хтмл не вникая в вставки шаблонизатора. Либо говорит разработчку что и где поменять.
    Ответ написан
    Комментировать
  • Использование ASP.NET Identity в трехуровневой архитектуре. Как изменить CookieAuthenticationProvider?

    @dmitrievMV Автор вопроса
    Пока решил вопрос по другому.
    1) Перенес ApplicationRoleManager, ApplicationSignInManager, ApplicationUserManager из DAL в BLL где они по сути и должны были быть как я понимаю, при этом оставил UserStore и RoleStore в DAl в UnitOfWork.
    2) Создал 2 статических метода в ApplicationSignInManager
    public static Func<CookieValidateIdentityContext, Task> OnValidateIdentity()
            {
                return SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser, int>(TimeSpan.FromMinutes(30), GetIdentityAsync, id => id.GetUserId<int>());
            }
    
            public static async Task<ClaimsIdentity> GetIdentityAsync(ApplicationUserManager manager, ApplicationUser user)
            {
                var userIdentity = await manager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
                //userIdentity.AddClaim(new Claim("FriendlyName", friendlyName));
                //userIdentity.AddClaim(new Claim("balance", balance.ToString(CultureInfo.CurrentCulture)));
                //userIdentity.AddClaim(new Claim("sms", sms.ToString()));
                //userIdentity.AddClaim(new Claim("minutes", minutes.ToString()));
                return userIdentity;
            }

    и подключил Owin библиотеки в BLL
    3) в Startup в MVC ипользовал созданный метод
    Provider = new CookieAuthenticationProvider
                    {
                        OnValidateIdentity = ApplicationSignInManager.OnValidateIdentity()
                    }


    Таким образом в BLL появились либы для работы с OWIN а в PL не появился EF
    Ответ написан
    Комментировать
  • Разница между get и return(Глупый вопрос)?

    @dmitrievMV
    может во 2 варианте имелось ввиду это?
    public string Test2()
            {
                return "большие ботинки";
            }


    тогда вот разница в IL Code:
    .method public hidebysig specialname instance string 
        get_Test() cil managed 
      {
        .maxstack 1
        .locals init (
          [0] string V_0
        )
    
        // [13 17 - 13 18]
        IL_0000: nop          
    
        // [13 19 - 13 44]
        IL_0001: ldstr        "большие ботинки"
        IL_0006: stloc.0      // V_0
        IL_0007: br.s         IL_0009
    
        // [13 45 - 13 46]
        IL_0009: ldloc.0      // V_0
        IL_000a: ret          
    
      } // end of method Class1::get_Test
    
      .method public hidebysig instance string 
        Test2() cil managed 
      {
        .maxstack 1
        .locals init (
          [0] string V_0
        )
    
        // [17 9 - 17 10]
        IL_0000: nop          
    
        // [18 13 - 18 38]
        IL_0001: ldstr        "большие ботинки"
        IL_0006: stloc.0      // V_0
        IL_0007: br.s         IL_0009
    
        // [19 9 - 19 10]
        IL_0009: ldloc.0      // V_0
        IL_000a: ret          
    
      } // end of method Class1::Test2
    Ответ написан
    Комментировать
  • Как в C# с помощью регулярных выражений получить подстроку?

    @dmitrievMV
    переменную суем в паттерн, паттерн суем в конструктор

    List<string> words = new List<string> { "hello", "World" };
    		string pattern = "("+ string.Join("|", words) + "),";
    		Console.WriteLine(pattern);
    		Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
    		
    		string text = "Hello, World, hello world heelo";
    		var matches = r.Matches(text);
    		foreach(var match in matches){
    			Console.WriteLine(match);
    		}


    https://dotnetfiddle.net/ScWaY1
    Ответ написан
    Комментировать
  • Как сравнить строки в c#, чтобы получить результат сравнения в процентах?

    @dmitrievMV
    достать из сток коллекцию слов(с учетом склонений?) и сравнивать колво совпадений
    Ответ написан
    Комментировать
  • Как сделать глобальный фильтр который проверит ModelState?

    @dmitrievMV Автор вопроса
    Я понял в чем моя ошибка.
    Во 1 я уверен что у меня на выходе всегда одно представление.
    Во 2 я уверен что это представление принимает модель которая входит.
    В 3 я уверен что входит только 1 параметр.
    А это не всегда так. В общем если принять во внимание такие условия то у меня вышел такой фильтр:
    public class ValidateModelAttribute : ActionFilterAttribute
        {
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                if (filterContext.Controller.ViewData.ModelState.IsValid == false)
                {
                    if (filterContext.ActionParameters.Count == 1)
                    {
                        filterContext.Controller.ViewData.Model = filterContext.ActionParameters.FirstOrDefault().Value;
                        filterContext.Result = new ViewResult
                        {
                            ViewData = filterContext.Controller.ViewData
                        };
                    }
                    else
                    {
                        throw new HttpException(400, "validation model error");
                    }
                }
            }
        }


    Входящая модель находится в filterContext.ActionParameters словаре. В ViewData можно положить новый ViewDataDictionary передав в его конструктор модель но тогда потеряем ошибки валидации. Попробую использовать такой фильтр, может его нужно будет доработать.
    Ответ написан
    Комментировать