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

    @dmitrievMV
    Для этих целей можно использовать automapper. https://github.com/AutoMapper/AutoMapper
    Ответ написан
    Комментировать
  • Представления (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
    Ответ написан
    Комментировать
  • Как сделать глобальный фильтр который проверит 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 передав в его конструктор модель но тогда потеряем ошибки валидации. Попробую использовать такой фильтр, может его нужно будет доработать.
    Ответ написан
    Комментировать