// Methods
        public bool CanWriteResult(OutputFormatterCanWriteContext context)
        {
            #region Contracts

            if (context == null)
            {
                throw new ArgumentException(nameof(context));
            }

            #endregion

            // Void
            if (context.ObjectType == typeof(void) || context.ObjectType == typeof(Task))
            {
                return(true);
            }

            // Null
            if (context.Object == null)
            {
                return(true);
            }

            // Return
            return(false);
        }
Esempio n. 2
0
        private IOutputFormatter SelectFormatterNotUsingContentType(
            OutputFormatterCanWriteContext formatterContext,
            IList <IOutputFormatter> formatters)
        {
            if (formatterContext == null)
            {
                throw new ArgumentNullException(nameof(formatterContext));
            }

            if (formatters == null)
            {
                throw new ArgumentNullException(nameof(formatters));
            }

            _logger.SelectFirstCanWriteFormatter();

            foreach (var formatter in formatters)
            {
                formatterContext.ContentType = new StringSegment();
                formatterContext.ContentTypeIsServerDefined = false;

                if (formatter.CanWriteResult(formatterContext))
                {
                    return(formatter);
                }
            }

            return(null);
        }
Esempio n. 3
0
        public override bool CanWriteResult([NotNull] OutputFormatterCanWriteContext context)
        {
            //var type = context.Object.GetType();
            //var request = context.Request;

            //if (request != null)
            //{
            //    IEdmModel model = request.ODataProperties().Model;
            //    if (model != null)
            //    {
            //        ODataPayloadKind? payloadKind = null;

            //        Type elementType;
            //        if (typeof(IEdmObject).GetTypeInfo().IsAssignableFrom(type.GetTypeInfo()) ||
            //            (type.IsCollection(out elementType) && typeof(IEdmObject).GetTypeInfo().IsAssignableFrom(elementType.GetTypeInfo())))
            //        {
            //            payloadKind = GetEdmObjectPayloadKind(type, request);
            //        }
            //        else
            //        {
            //            payloadKind = GetClrObjectResponsePayloadKind(type, model, request);
            //        }

            //        return payloadKind == null ? false : _payloadKinds.Contains(payloadKind.Value);
            //    }
            //}

            //return false;
            return(base.CanWriteResult(context));
        }
Esempio n. 4
0
        /// <inheritdoc />
        public override bool CanWriteResult(OutputFormatterCanWriteContext context)
        {
            if (!base.CanWriteResult(context))
            {
                return(false);
            }

            var httpContext = context.HttpContext;
            var viewEngine  = httpContext.RequestServices.GetRequiredService <IRazorViewEngine>();

            httpContext.Items.TryGetValue("ModelState", out var modelState);
            httpContext.Items.TryGetValue("RouteData", out var routeData);
            httpContext.Items.TryGetValue("ActionDescriptor", out var actionDescriptor);
            var actionContext = new ActionContext(
                httpContext,
                routeData as RouteData ?? new RouteData(),
                actionDescriptor as ActionDescriptor ?? new ActionDescriptor(),
                modelState as ModelStateDictionary ?? new ModelStateDictionary());

            if (!actionContext.RouteData.Values.TryGetValue("view", out var viewObject) || viewObject is not string viewName)
            {
                viewName = actionContext.RouteData.Values["action"]?.ToString() ?? string.Empty;
            }

            var result = viewEngine.FindView(actionContext, viewName, false);

            return(result.Success);
        }
Esempio n. 5
0
        private IOutputFormatter SelectFormatterUsingSortedAcceptHeadersAndContentTypes(
            OutputFormatterCanWriteContext formatterContext,
            IList <IOutputFormatter> formatters,
            IList <MediaTypeSegmentWithQuality> sortedAcceptableContentTypes,
            MediaTypeCollection possibleOutputContentTypes)
        {
            for (var i = 0; i < sortedAcceptableContentTypes.Count; i++)
            {
                var acceptableContentType = new MediaType(sortedAcceptableContentTypes[i].MediaType);
                for (var j = 0; j < possibleOutputContentTypes.Count; j++)
                {
                    var candidateContentType = new MediaType(possibleOutputContentTypes[j]);
                    if (candidateContentType.IsSubsetOf(acceptableContentType))
                    {
                        for (var k = 0; k < formatters.Count; k++)
                        {
                            var formatter = formatters[k];
                            formatterContext.ContentType = new StringSegment(possibleOutputContentTypes[j]);
                            formatterContext.ContentTypeIsServerDefined = true;
                            if (formatter.CanWriteResult(formatterContext))
                            {
                                return(formatter);
                            }
                        }
                    }
                }
            }

            return(null);
        }
Esempio n. 6
0
        internal static bool IsRawBinaryRequest(this OutputFormatterCanWriteContext context, Type type)
        {
            if (type == typeof(Binary) || (type == typeof(FhirResponse)) && ((FhirResponse)context.Object).Resource is Binary)
            {
                HttpRequest request         = context.HttpContext.Request;
                bool        isFhirMediaType = false;
                if (request.Method == "GET")
                {
                    isFhirMediaType = request.IsAcceptHeaderFhirMediaType();
                }
                else if (request.Method == "POST" || request.Method == "PUT")
                {
                    isFhirMediaType = HttpRequestExtensions.IsContentTypeHeaderFhirMediaType(request.ContentType);
                }

                var ub = new UriBuilder(request.GetRequestUri());
                // TODO: KM: Path matching is not optimal should be replaced by a more solid solution.
                return(ub.Path.Contains("Binary") &&
                       !isFhirMediaType);
            }
            else
            {
                return(false);
            }
        }
Esempio n. 7
0
        private void EnsureSerializer(OutputFormatterCanWriteContext context)
        {
            if (context.HttpContext.Items[Constants.ContextKeys.JsonMultiCase] is ITextTransform transform)
            {
                if (!_resolvers.TryGetValue(transform, out var resolver))
                {
                    resolver = new JsonContractResolver(transform, JsonProcessingDirection.Output);
                    _resolvers.Add(transform, resolver);
                }

                _serializer.ContractResolver = resolver;
            }

            if (context.HttpContext.Items[Constants.ContextKeys.JsonPrettyPrint] is bool prettyPrint && !prettyPrint)
            {
                _serializer.Apply(s => s.Formatting = Formatting.None);
            }

            if (context.HttpContext.Items[Constants.ContextKeys.JsonTrim] is bool trim && trim)
            {
                _serializer.Apply(s =>
                {
                    s.NullValueHandling    = NullValueHandling.Ignore;
                    s.DefaultValueHandling = DefaultValueHandling.Ignore;
                });
            }
        }
 public override bool CanWriteResult(OutputFormatterCanWriteContext context)
 {
     // This test formatter matches if and only if the content type is specified
     // as "server defined". This lets tests identify what value the ObjectResultExecutor
     // passed for that flag.
     return(context.ContentTypeIsServerDefined);
 }
Esempio n. 9
0
 public bool CanWriteResult(OutputFormatterCanWriteContext context)
 {
     if (context == null)
     {
         throw new ArgumentNullException(nameof(context));
     }
     return(true);
 }
Esempio n. 10
0
 public bool CanWriteResult(OutputFormatterCanWriteContext context)
 {
     if (context == null)
     {
         throw new ArgumentNullException(nameof(context));
     }
     return(context.ContentType == null || context.ContentType.ToString() == ContentType);
 }
Esempio n. 11
0
 public bool CanWriteResult(OutputFormatterCanWriteContext context)
 {
     if (context == null)
     {
         throw new ArgumentNullException(nameof(context));
     }
     return(context.ObjectType == typeof(imsx_POXEnvelopeType));
 }
Esempio n. 12
0
        public override bool CanWriteResult(OutputFormatterCanWriteContext context)
        {
            var type = context.HttpContext.Request.Headers["accept"];
            var ret  = SupportedMediaTypes.Contains(type);

            ret &= base.CanWriteResult(context);
            return(ret);
        }
Esempio n. 13
0
        public bool CanWriteResult(OutputFormatterCanWriteContext context)
        {
            var  name              = context.HttpContext.GetFormatterName();
            bool nameStatus        = name == _formatterName;
            bool contentTypeStatus = _types.Sum(x => x.Matches(GetContentType(context)).Count) > 0;

            return(nameStatus && contentTypeStatus);
        }
    public bool CanWriteResult(OutputFormatterCanWriteContext context)
    {
      if (context == null)
        throw new ArgumentNullException(nameof(context));

      var contentTypeString = context.ContentType.ToString();

      return string.IsNullOrEmpty(contentTypeString) || contentTypeString == "application/json";
    }
        public override bool CanWriteResult(OutputFormatterCanWriteContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            return(_jsonOutputFormatter.CanWriteResult(context));
        }
Esempio n. 16
0
        public override bool CanWriteResult(OutputFormatterCanWriteContext context)
        {
            if (context.ObjectType == typeof(IEnumerable <string>))
            {
                return(true);
            }

            return(base.CanWriteResult(context));
        }
Esempio n. 17
0
        public bool CanWriteResult(OutputFormatterCanWriteContext context)
        {
            var httpContext         = ((OutputFormatterWriteContext)context).HttpContext;
            var allowedContentTypes = new string[] { "text/ascii", "image/png" };

            return
                (httpContext.Request.Path == "/ping" &&
                 allowedContentTypes.Contains(httpContext.Request.ContentType));
        }
Esempio n. 18
0
 public static void NoFormatter(
     this ILogger logger,
     OutputFormatterCanWriteContext formatterContext)
 {
     if (logger.IsEnabled(LogLevel.Warning))
     {
         _noFormatter(logger, Convert.ToString(formatterContext.ContentType), null);
     }
 }
Esempio n. 19
0
        public override bool CanWriteResult(OutputFormatterCanWriteContext context)
        {
            if (context.Object is T)
            {
                return(true);
            }

            return(false);
        }
Esempio n. 20
0
        public bool CanWriteResult(OutputFormatterCanWriteContext context)
        {
            if (context.ObjectType == typeof(void) || context.ObjectType == typeof(Task))
            {
                return(true);
            }

            return(context.Object == null);
        }
Esempio n. 21
0
        public override bool CanWriteResult(OutputFormatterCanWriteContext context)
        {
            if (!base.CanWriteResult(context))
            {
                return(false);
            }

            return((context.Object as ExecutionResult)?.ContainsRequiredEntityType(_entityType) ?? false);
        }
        public bool CanWriteResult(OutputFormatterCanWriteContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            return(context.HttpContext.IsJsonApiRequest());
        }
Esempio n. 23
0
 public bool CanWriteResult(OutputFormatterCanWriteContext context)
 {
     if (context.ContentType.HasValue)
     {
         return(context.ContentType.Value == ContentType);
     }
     context.ContentType = new StringSegment(ContentType);
     return(true);
 }
Esempio n. 24
0
        public override bool CanWriteResult(OutputFormatterCanWriteContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            return(context.HttpContext.Request.ContentType == CONTENT_TYPE);
        }
        public override bool CanWriteResult(OutputFormatterCanWriteContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            return _jsonMediaTypeFormatter.CanWriteResult(context);
        }
Esempio n. 26
0
        public override bool CanWriteResult(OutputFormatterCanWriteContext context)
        {
            if (context.Object is HypermediaQueryLocation)
            {
                return(true);
            }

            return(false);
        }
        public bool CanWriteResult(OutputFormatterCanWriteContext context)
        {
            if (typeof(ResourceResult).GetTypeInfo().IsAssignableFrom(context.ObjectType.GetTypeInfo()))
            {
                return(true);
            }

            return(false);
        }
Esempio n. 28
0
    public bool CanWriteResult(OutputFormatterCanWriteContext context)
    {
        var response = context.HttpContext.Response;

        var contentType = GetNonEmptyString(context.ContentType.Value, response.ContentType, JSONUTF8ContentType);

        var mediaType = new MediaType(contentType);

        return(mediaType.SubType == "json");
    }
Esempio n. 29
0
        public bool CanWriteResult(OutputFormatterCanWriteContext context)
        {
            //    if (context == null)
            //        throw new ArgumentNullException(nameof(context));

            //    if (context.Object is PushStreamResult)
            //        return true;

            return(false);
        }
Esempio n. 30
0
    public bool CanWriteResult(OutputFormatterCanWriteContext context)
    {
        if (context == null)
            throw new ArgumentNullException(nameof(context));

        if (context.Object is PushStreamContent)
            return true;

        return false;
    }
Esempio n. 31
0
 public override bool CanWriteResult(OutputFormatterCanWriteContext context)
 {
     if (context.Object != null && context.HttpContext.Request.ContentType.Equals(Protobuf.MediaType))
     {
         // Check whether the given object is a proto-generated object
         return(context.ObjectType.GetInterfaces()
                .Where(i => i.IsGenericTypeDefinition && i == typeof(IMessage <>)) != null);
     }
     return(false);
 }
Esempio n. 32
0
    public bool CanWriteResult(OutputFormatterCanWriteContext context)
    {
        var response = context.HttpContext.Response;

        var contentType = GetNonEmptyString(context.ContentType.Value, response.ContentType, JSONContentType);

        var mediaType = new MediaType(contentType);

        return(mediaType.SubType.Equals("json", StringComparison.InvariantCultureIgnoreCase));
    }
        public override bool CanWriteResult(OutputFormatterCanWriteContext context)
        {
            // this override is necessary to stop StringOutputFormatter from injecting UTF-8
            // and text/plain media type arbitrarily
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            return context.ObjectType == typeof(string) || context.Object is string;
        }
Esempio n. 34
0
 public override bool CanWriteResult(OutputFormatterCanWriteContext context)
 {
     if (base.CanWriteResult(context))
     {
         var actionReturnString = context.Object as string;
         if (actionReturnString != null)
         {
             return true;
         }
     }
     return false;
 }
 public override bool CanWriteResult(OutputFormatterCanWriteContext context)
 {
     bool result = false;
     if (this.CanWriteType(context.ObjectType))
     {
         if ((context.ContentType != null) && (context.ContentType.StartsWith("application", StringComparison.InvariantCultureIgnoreCase)) && context.ContentType.EndsWith("+xml", StringComparison.InvariantCultureIgnoreCase))
             result = true;
         else
             result = base.CanWriteResult(context);
     }
     return result;
 }
        /// <inheritdoc />
        public bool CanWriteResult(OutputFormatterCanWriteContext context)
        {
            // ignore the contentType and just look at the content.
            // This formatter will be selected if the content is null.
            // We check for Task as a user can directly create an ObjectContentResult with the unwrapped type.
            if (context.ObjectType == typeof(void) || context.ObjectType == typeof(Task))
            {
                return true;
            }

            return TreatNullValueAsNoContent && context.Object == null;
        }
Esempio n. 37
0
        /// <inheritdoc />
        public bool CanWriteResult(OutputFormatterCanWriteContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            // Ignore the passed in content type, if the object is a Stream.
            if (context.Object is Stream)
            {
                return true;
            }

            return false;
        }
Esempio n. 38
0
        /// <inheritdoc />
        public virtual bool CanWriteResult(OutputFormatterCanWriteContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            if (SupportedMediaTypes.Count == 0)
            {
                var message = Resources.FormatFormatter_NoMediaTypes(
                    GetType().FullName,
                    nameof(SupportedMediaTypes));

                throw new InvalidOperationException(message);
            }

            if (!CanWriteType(context.ObjectType))
            {
                return false;
            }

            if (!context.ContentType.HasValue)
            {
                // If the desired content type is set to null, then the current formatter can write anything
                // it wants.
                context.ContentType = new StringSegment(SupportedMediaTypes[0]);
                return true;
            }
            else
            {
                // Confirm this formatter supports a more specific media type than requested e.g. OK if "text/*"
                // requested and formatter supports "text/plain". contentType is typically what we got in an Accept
                // header.
                var parsedContentType = new MediaType(context.ContentType);
                for (var i = 0; i < SupportedMediaTypes.Count; i++)
                {
                    var supportedMediaType = new MediaType(SupportedMediaTypes[i]);
                    if (supportedMediaType.IsSubsetOf(parsedContentType))
                    {
                        context.ContentType = new StringSegment(SupportedMediaTypes[i]);
                        return true;
                    }
                }
            }

            return false;
        }
Esempio n. 39
0
 public virtual bool CanWriteResult(OutputFormatterCanWriteContext context)
 {
     return false;
 }
 public bool CanWriteResult(OutputFormatterCanWriteContext context)
 {
     return context.Object is HttpResponseMessage;
 }
Esempio n. 41
0
 public bool CanWriteResult(OutputFormatterCanWriteContext context) {
     return context.ObjectType == typeof(HALResponse);
 }
Esempio n. 42
0
 public bool CanWriteResult(OutputFormatterCanWriteContext context)
 {
     return true;
 }