public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
 {
     if (bindingContext.ModelType == typeof(T))
     {
         string hash = bindingContext.ValueProvider.GetValue("id").RawValue.ToString();
         if (!string.IsNullOrWhiteSpace(hash))
         {
             int id = HashIdHelper.ToInt(hash);
             if (id > 0)
             {
                 using (ApplicationContext context = new ApplicationContext())
                 {
                     DbRawSqlQuery <T> query = context.Database.SqlQuery <T>(string.Format("SELECT * FROM {0} WHERE id = @Id LIMIT 1", EntityHelper.GetTableName <T>(context)), new MySqlParameter("@Id", id));
                     try
                     {
                         T model = query.Cast <T>().FirstOrDefault();
                         if (model != null)
                         {
                             return(model);
                         }
                     }
                     catch (Exception ex)
                     {
                         if (ex is ArgumentNullException || ex is InvalidCastException)
                         {
                             return(base.BindModel(controllerContext, bindingContext));
                         }
                         throw;
                     }
                 }
             }
         }
     }
     return(base.BindModel(controllerContext, bindingContext));
 }
        public async Task <ActionResult <AudioDto> > Get([FromRoute] string slug, CancellationToken cancellationToken)
        {
            // Decode hash into audio id
            var id = HashIdHelper.DecodeLong(slug);

            var result = await _mediator.Send(new GetAudioQuery(id), cancellationToken);

            return(result != null
                ? new JsonResult(result)
                : NotFound(ErrorApiResponse.NotFound("Audio was not found.")));
        }
Example #3
0
    public AudioDtoMapping()
    {
        long?userId = null;

        this.CreateStrictMap <Audio, AudioDto>()
        .ForMember(dest => dest.Description, c =>
                   c.NullSubstitute(""))
        .ForMember(dest => dest.Slug, c =>
                   c.MapFrom(src => HashIdHelper.EncodeLong(src.Id)))
        .ForMember(dest => dest.Src, c =>
                   c.MapFrom(src => src.File))
        .ForMember(dest => dest.IsFavorited, c =>
                   c.MapFrom(src => userId > 0 ? src.FavoriteAudios.Any(fa => fa.UserId == userId) : (bool?)null));
    }