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."))); }
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)); }