public void TestCustomMediaTypeGetFormatFromContentType() { var resolver = new MyMediaTypeResolver(); foreach (var payloadKind in Enum.GetValues(typeof(ODataPayloadKind)).Cast <ODataPayloadKind>()) { if (payloadKind == ODataPayloadKind.Unsupported) { continue; } string contentType = "text/x-A"; string expectedBoundary = null; ODataMediaType expectedMediaType = MyFormat.MediaTypeWithFormatA.MediaType; if (payloadKind == ODataPayloadKind.Batch) { expectedBoundary = "ba_" + Guid.NewGuid(); contentType += ";boundary=" + expectedBoundary; expectedMediaType = new ODataMediaType("text", "x-A", new KeyValuePair <string, string>("boundary", expectedBoundary)); } ODataMediaType mediaType; Encoding encoding; ODataPayloadKind selectedPayloadKind; ODataFormat actual = MediaTypeUtils.GetFormatFromContentType(contentType, new[] { payloadKind }, resolver, out mediaType, out encoding, out selectedPayloadKind); Console.WriteLine(payloadKind); actual.ShouldBeEquivalentTo(MyFormat.Instance); mediaType.ShouldBeEquivalentTo(expectedMediaType); encoding.ShouldBeEquivalentTo(payloadKind == ODataPayloadKind.BinaryValue ? null : Encoding.UTF8); selectedPayloadKind.ShouldBeEquivalentTo(payloadKind); } }
public void MultipartBoundariesShouldNotGrowCache() { for (int i = 1; i < 100; i++) { ODataMediaType mediaType; Encoding encoding; ODataPayloadKind payloadKind; MediaTypeUtils.GetFormatFromContentType(string.Format("multipart/mixed;boundary={0}", Guid.NewGuid()), new ODataPayloadKind[] { ODataPayloadKind.Batch }, ODataMediaTypeResolver.GetMediaTypeResolver(null), out mediaType, out encoding, out payloadKind); } Assert.True(MediaTypeUtils.GetCacheKeys().Count(k => k.StartsWith("multipart/mixed")) == 1, "Multiple multipart/mixed keys in cache"); }
internal static TestMediaTypeWithFormat ParseContentType(string contentType, ODataVersion version, ODataMediaTypeResolver resolver = null) { ODataMediaType mediaType; Encoding encoding; ODataPayloadKind payloadKind; var format = MediaTypeUtils.GetFormatFromContentType(contentType, new[] { ODataPayloadKind.Resource }, resolver ?? ODataMediaTypeResolver.GetMediaTypeResolver(null), out mediaType, out encoding, out payloadKind); Assert.NotNull(mediaType); Assert.NotNull(format); return(new TestMediaTypeWithFormat { MediaType = mediaType, Format = format }); }
internal static TestMediaTypeWithFormat ParseContentType(string contentType, ODataVersion version, ODataMediaTypeResolver resolver = null) { ODataMediaType mediaType; Encoding encoding; ODataPayloadKind payloadKind; string batchBoundary; var format = MediaTypeUtils.GetFormatFromContentType(contentType, new[] { ODataPayloadKind.Entry }, resolver ?? ODataMediaTypeResolver.DefaultMediaTypeResolver, out mediaType, out encoding, out payloadKind, out batchBoundary); mediaType.Should().NotBeNull(); format.Should().NotBeNull(); return(new TestMediaTypeWithFormat { MediaType = mediaType, Format = format }); }
/// <summary> /// Parse the content type header value to retrieve the boundary and encoding of a changeset. /// </summary> /// <param name="contentType">The content type to parse.</param> private void DetermineChangesetBoundaryAndEncoding(string contentType) { Debug.Assert(!string.IsNullOrEmpty(contentType), "Should have validated that non-null, non-empty content type header exists."); ODataMediaType mediaType; ODataPayloadKind readerPayloadKind; MediaTypeUtils.GetFormatFromContentType( contentType, new ODataPayloadKind[] { ODataPayloadKind.Batch }, this.mediaTypeResolver, out mediaType, out this.changesetEncoding, out readerPayloadKind); Debug.Assert(readerPayloadKind == ODataPayloadKind.Batch, "Must find batch payload kind."); Debug.Assert(HttpUtils.CompareMediaTypeNames(MimeConstants.MimeMultipartMixed, mediaType.FullTypeName), "Must be multipart/mixed media type."); this.changesetBoundary = ODataMultipartMixedBatchWriterUtils.GetBatchBoundaryFromMediaType(mediaType); Debug.Assert(this.changesetBoundary != null && this.changesetBoundary.Length > 0, "Boundary string should have been validated by now."); }
public void MediaTypeResolutionForJsonBatchShouldWork() { string[] contentTypes = new string[] { "application/json", "application/json;odata.metadata=minimal", "application/json;odata.metadata=minimal;odata.streaming=true", "application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false" }; foreach (string contentType in contentTypes) { ODataMediaType mediaType; Encoding encoding; ODataPayloadKind payloadKind; ODataFormat format = MediaTypeUtils.GetFormatFromContentType(contentType, new[] { ODataPayloadKind.Batch }, ODataMediaTypeResolver.GetMediaTypeResolver(null), out mediaType, out encoding, out payloadKind); Assert.NotNull(mediaType); Assert.NotNull(encoding); Assert.Equal(ODataPayloadKind.Batch, payloadKind); Assert.Equal(ODataFormat.Json, format); } }