public void SelectsSuperItemBasedOnParameter_5LMT()
        {
            // arrange
            var configuration = new HttpConfiguration();
            configuration.Services.Replace(typeof(IHttpActionSelector), new MediaTypeBasedActionSelector());
            configuration.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
            configuration.AddFiveLevelsOfMediaType();
            var server = new InMemoryServer(configuration);
            var client = new HttpClient(server);
            var request = new HttpRequestMessage(HttpMethod.Get, "http://lhasa/api/Item/1");
            var headerValue = new MediaTypeWithQualityHeaderValue("application/json");
            headerValue.Parameters.Add(new NameValueHeaderValue("domain-model", "SuperItem"));
            request.Headers.Accept.Add(headerValue);

            // act
            var response = client.SendAsync(request).Result;
            var content = response.Content.ReadAsStringAsync().Result;
            var mediaType = response.Content.Headers.ContentType.ExtractFiveLevelsOfMediaType();

            // assert
            Assert.Equal("SuperItem", mediaType.DomainModel);
        }
 private static HttpResponseMessage GetResponse(HttpConfiguration configuration, HttpResponseMessage initialResponse)
 {
     configuration.AddFiveLevelsOfMediaType();
     var handler = new DummyMessageHandler() { Response = initialResponse };
     var httpServer = new HttpServer(configuration, handler);
     var invoker = new HttpMessageInvoker(httpServer);
     return invoker.SendAsync(new HttpRequestMessage(HttpMethod.Get, "http://localhost/api/ddd"),
                                    CancellationToken.None).Result;
 }
Exemplo n.º 3
0
        public static void Register(HttpConfiguration config)
        {
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            config.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings()
            {
                ContractResolver = new CamelCasePropertyNamesContractResolver()
            };

            config.AddFiveLevelsOfMediaType();

            config.Filters.Add(new ConcurrencyAwareFilterAttribute());
            config.Filters.Add(new ConcurrencyExceptionFilterAttribute());
        }
        public void FiveLevelsAddsParams()
        {
            // set up
            var httpConfiguration = new HttpConfiguration();
            httpConfiguration.AddFiveLevelsOfMediaType();
            var response = new HttpResponseMessage(HttpStatusCode.Created);
            response.Content = new ObjectContent<Person>(new Person(), httpConfiguration.Formatters[0]);

            // run
            var result = GetResponse(httpConfiguration, response);

            var dictionary = result.Content.Headers.ContentType.Parameters.ToDictionary(x => x.Name, y => y.Value);

            // assert
            Assert.Equal(true.ToString(), dictionary[FiveLevelsOfMediaTypeParameters.IsText]);
            Assert.Equal("Person", dictionary[FiveLevelsOfMediaTypeParameters.DomainModel]);
            Assert.Equal(Assembly.GetExecutingAssembly()
                                 .GetName().Version.ToString(), dictionary[FiveLevelsOfMediaTypeParameters.Version]);
            Assert.Equal("application/json", HttpUtility.UrlDecode(dictionary[FiveLevelsOfMediaTypeParameters.Format]));
            Assert.Equal("application/json", HttpUtility.UrlDecode(dictionary[FiveLevelsOfMediaTypeParameters.Schema]));
        }