コード例 #1
0
        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();
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
 public virtual IStateConverter SelectConverter(StateConverterProviderContext context,
                                                IEnumerable <IStateConverterProvider> converters)
 {
     return(converters.Select(x => x.CreateConverter(context)).FirstOrDefault(x => x != null));
 }