public override async Task WriteResponseBodyAsync(OutputFormatterWriteContext context, Encoding selectedEncoding) { var response = context.HttpContext.Response; var converters = StateConverters; var converterProviderContext = new StateConverterProviderContext { ObjectType = context.ObjectType }; var selectedConverter = SelectConverter(converterProviderContext, converters); if (selectedConverter == null) { context.HttpContext.Response.StatusCode = StatusCodes.Status406NotAcceptable; return; } var converterContext = new StateConverterContext { HttpContext = context.HttpContext, Object = context.Object, ObjectType = context.ObjectType }; var document = await selectedConverter.ConvertAsync(converterContext); using (var writer = context.WriterFactory(response.Body, selectedEncoding)) { WriteObject(writer, document); await writer.FlushAsync(); } }
public IStateConverter CreateConverter(StateConverterProviderContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (typeof(Root).IsAssignableFrom(context.ObjectType)) { return(new RootStateConverter()); } if (typeof(IEnumerable <Customer>).IsAssignableFrom(context.ObjectType)) { return(new CustomerCollectionStateConverter()); } if (typeof(Customer).IsAssignableFrom(context.ObjectType)) { return(new CustomerStateConverter()); } if (typeof(PhoneLine).IsAssignableFrom(context.ObjectType)) { return(new PhoneLineStateConverter()); } if (typeof(Broadband).IsAssignableFrom(context.ObjectType)) { return(new BroadbandStateConverter()); } if (typeof(StaticIp).IsAssignableFrom(context.ObjectType)) { return(new StaticIpStateConverter()); } return(null); }
public virtual IStateConverter SelectConverter(StateConverterProviderContext context, IEnumerable <IStateConverterProvider> converters) { return(converters.Select(x => x.CreateConverter(context)).FirstOrDefault(x => x != null)); }