/// <summary> /// Gets the expected payload type for a request to the given uri /// </summary> /// <param name="requestUri">The request uri</param> /// <returns>The expected payload type</returns> public static ODataPayloadElementType GetExpectedPayloadType(this ODataUri requestUri) { if (requestUri.Segments.OfType <UnrecognizedSegment>().Any()) { return(ODataPayloadElementType.Unknown); } if (requestUri.IsMetadata()) { return(ODataPayloadElementType.MetadataPayloadElement); } if (requestUri.IsBatch()) { return(ODataPayloadElementType.BatchResponsePayload); } if (requestUri.IsCount() || requestUri.IsPropertyValue() || requestUri.IsMediaResource() || requestUri.IsNamedStream()) { return(ODataPayloadElementType.PrimitiveValue); } if (requestUri.IsEntity()) { return(ODataPayloadElementType.EntityInstance); } if (requestUri.IsEntitySet()) { return(ODataPayloadElementType.EntitySetInstance); } if (requestUri.IsEntityReferenceLink()) { return(requestUri.GetExpectedLinkPayloadType()); } if (requestUri.IsProperty()) { var property = requestUri.Segments.OfType <PropertySegment>().Last(); return(property.Property.GetExpectedPayloadType()); } if (requestUri.IsServiceOperation() || requestUri.IsAction()) { var serviceOp = requestUri.Segments.OfType <FunctionSegment>().Last(); return(serviceOp.Function.GetExpectedPayloadType()); } return(ODataPayloadElementType.Unknown); }
internal static HttpStatusCode GetExpectedStatusCode(ODataUri uri, IODataUriEvaluator evaluator) { bool specialStatusCodeIfNull = false; specialStatusCodeIfNull |= uri.IsNamedStream(); specialStatusCodeIfNull |= uri.IsMediaResource(); specialStatusCodeIfNull |= uri.IsEntity(); specialStatusCodeIfNull |= uri.IsEntityReferenceLink(); specialStatusCodeIfNull |= uri.IsPropertyValue(); bool uriIsValue = uri.IsNamedStream() || uri.IsMediaResource(); // For an action it is evaluated specially via the actionresponse verifier, skip eval here if (!uri.IsAction() && specialStatusCodeIfNull && evaluator.Evaluate(uri).IsNull) { if (uriIsValue) { return HttpStatusCode.NoContent; } else { return HttpStatusCode.NotFound; } } return HttpStatusCode.OK; }
private static bool HasETagOnRetrieve(ODataUri uri) { if (uri.ExpandSegments.Any()) { return false; } if (uri.IsEntity()) { return true; } if (uri.IsProperty()) { return true; } if (uri.IsPropertyValue() || uri.IsMediaResource()) { // this covers media-resources as well return true; } if (uri.IsNamedStream()) { return true; } return false; }