/// <summary> /// Отрисовывает переданный <see cref="IFileDescriptor" /> как контент с указанным MIME /// </summary> /// <param name="context"> </param> public override void Render(IMvcContext context) { var descriptor = context.ActionResult as IFileDescriptor; if (null == descriptor) { throw new QorpentException("Тип результата NULL или не совместим с FileDescriptorRender"); } if (descriptor.Role.IsNotEmpty()) { var auth = Application.Roles.IsInRole(context.User.Identity, descriptor.Role); if (!auth) { throw new QorpentSecurityException("Доступ к файлу не авторизован " + auth); } } if (descriptor.NeedDisposition) { var filename = descriptor.Name; var extension = Path.GetExtension(filename); if (string.IsNullOrWhiteSpace(extension)) { extension = MimeHelper.GetExtensionByMime(descriptor.MimeType); filename = filename + extension; } context.FileDisposition = filename; } context.ContentType = descriptor.MimeType; if (descriptor.IsStream) { context.WriteOutStream(descriptor.GetStream()); } else { if (descriptor.Data != null) { context.WriteOutStream(new MemoryStream(descriptor.Data)); } else { context.Output.Write(descriptor.Content); } } }