using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using System.Threading.Tasks; using zero.Core.Api; using zero.Web.Models; namespace zero.Web.Filters { public class AddTokenAttribute : TypeFilterAttribute { public AddTokenAttribute() : base(typeof(AddTokenAttributeImpl)) { } private class AddTokenAttributeImpl : IAsyncResultFilter { IToken token; public AddTokenAttributeImpl(IToken token) { this.token = token; } public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next) { if (context.Result is JsonResult) { JsonResult result = context.Result as JsonResult; if (result.Value is ObsoleteEditModel) { ObsoleteEditModel model = result.Value as ObsoleteEditModel; model.Meta = model.Meta ?? new EditModelMeta(); model.Meta.Token = await token.Get(model.Id); } if (result.Value is ObsoleteEditModel) { ObsoleteEditModel model = result.Value as ObsoleteEditModel; model.Meta = model.Meta ?? new EditModelMeta(); model.Meta.Token = await token.Get(model.Id); } } await next(); } } } }