public void GetCorsPolicyProvider_Preflight_DisposesControllerAfterActionSelection() { // Arrange AttributeBasedPolicyProviderFactory providerFactory = new AttributeBasedPolicyProviderFactory(); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Options, "http://localhost/sample"); request.Headers.Add("Origin", "http://localhost"); request.Headers.Add(CorsConstants.AccessControlRequestMethod, "POST"); HttpConfiguration config = new HttpConfiguration(); HttpControllerContext controllerContext = null; var actionSelector = new Mock <IHttpActionSelector>(); actionSelector.Setup(s => s.SelectAction(It.IsAny <HttpControllerContext>())) .Callback <HttpControllerContext>(context => { Assert.False(((SampleController)context.Controller).Disposed); controllerContext = context; }); config.Services.Replace(typeof(IHttpActionSelector), actionSelector.Object); request.SetConfiguration(config); IHttpRoute route = config.Routes.MapHttpRoute("default", "{controller}/{id}", new { id = RouteParameter.Optional }); request.SetRouteData(route.GetRouteData("/", request)); ICorsPolicyProvider provider = providerFactory.GetCorsPolicyProvider(request); // Assert Assert.True(((SampleController)controllerContext.Controller).Disposed); }
public void GetCorsPolicyProvider_Preflight_ReturnsExpectedPolicyProvider( string httpMethod, string path, Type expectedProviderType ) { AttributeBasedPolicyProviderFactory providerFactory = new AttributeBasedPolicyProviderFactory(); HttpRequestMessage request = new HttpRequestMessage( HttpMethod.Options, "http://localhost/sample" + path ); request.Headers.Add("Origin", "http://localhost"); request.Headers.Add(CorsConstants.AccessControlRequestMethod, httpMethod); HttpConfiguration config = new HttpConfiguration(); request.SetConfiguration(config); IHttpRoute route = config.Routes.MapHttpRoute( "default", "{controller}/{id}", new { id = RouteParameter.Optional } ); request.SetRouteData(route.GetRouteData("/", request)); ICorsPolicyProvider provider = providerFactory.GetCorsPolicyProvider(request); Assert.True(request.GetCorsRequestContext().IsPreflight); Assert.IsType(expectedProviderType, provider); }
public void GetCorsPolicyProvider_Preflight_Throws_WhenNoDefaultPolicyProviderAndActionSelectionFails() { AttributeBasedPolicyProviderFactory providerFactory = new AttributeBasedPolicyProviderFactory(); HttpRequestMessage request = new HttpRequestMessage( HttpMethod.Options, "http://localhost/sample" ); request.Headers.Add("Origin", "http://localhost"); request.Headers.Add(CorsConstants.AccessControlRequestMethod, "RandomMethod"); HttpConfiguration config = new HttpConfiguration(); request.SetConfiguration(config); IHttpRoute route = config.Routes.MapHttpRoute( "default", "{controller}/{id}", new { id = RouteParameter.Optional } ); request.SetRouteData(route.GetRouteData("/", request)); Assert.True(request.GetCorsRequestContext().IsPreflight); Assert.Throws <HttpResponseException>( () => providerFactory.GetCorsPolicyProvider(request) ); }
public void GetCorsPolicyProvider_Preflight_ReturnsDefaultPolicyProvider_WhenActionSelectionFails() { AttributeBasedPolicyProviderFactory providerFactory = new AttributeBasedPolicyProviderFactory(); ICorsPolicyProvider mockProvider = new Mock <ICorsPolicyProvider>().Object; providerFactory.DefaultPolicyProvider = mockProvider; HttpRequestMessage request = new HttpRequestMessage( HttpMethod.Options, "http://localhost/sample" ); request.Headers.Add("Origin", "http://localhost"); request.Headers.Add(CorsConstants.AccessControlRequestMethod, "RandomMethod"); HttpConfiguration config = new HttpConfiguration(); request.SetConfiguration(config); IHttpRoute route = config.Routes.MapHttpRoute( "default", "{controller}/{id}", new { id = RouteParameter.Optional } ); request.SetRouteData(route.GetRouteData("/", request)); ICorsPolicyProvider provider = providerFactory.GetCorsPolicyProvider(request); Assert.True(request.GetCorsRequestContext().IsPreflight); Assert.Same(mockProvider, provider); }
public void GetCorsPolicyProvider_Preflight_NoHttpConfiguration_Throws() { AttributeBasedPolicyProviderFactory providerFactory = new AttributeBasedPolicyProviderFactory(); // No HttpConfiguration set on the request. HttpRequestMessage request = new HttpRequestMessage( HttpMethod.Options, "http://localhost/sample" ); request.Headers.Add("Origin", "http://localhost"); request.Headers.Add(CorsConstants.AccessControlRequestMethod, "GET"); HttpConfiguration config = new HttpConfiguration(); IHttpRoute route = config.Routes.MapHttpRoute( "default", "{controller}/{id}", new { id = RouteParameter.Optional } ); request.SetRouteData(route.GetRouteData("/", request)); Assert.Throws <InvalidOperationException>( () => providerFactory.GetCorsPolicyProvider(request), "The request does not have an associated configuration object." ); }
protected void SetUpRequest(string routeName, HttpMethod method, string appRelativeUri) { var absoluteUri = "http://localhost/" + appRelativeUri; request = new HttpRequestMessage(method, absoluteUri); request.Properties.Add(HttpPropertyKeys.HttpConfigurationKey, configuration); request.RequestUri = new Uri(absoluteUri); route = configuration.Routes[routeName]; routeData = route.GetRouteData("/", request); Assert.That(routeData, Is.Not.Null, "The route name {0} does not match {1} request uri on {2}.", routeName, method, absoluteUri); request.Properties[HttpPropertyKeys.HttpRouteDataKey] = route.GetRouteData("/", request); controller.Request = request; }
private static HttpRequestMessage CreateRequest(HttpConfiguration config, string requestUri) { IHttpRoute route = config.Routes.MapHttpRoute("default", "api/{controller}/{id}", new { id = RouteParameter.Optional }); var request = new HttpRequestMessage(HttpMethod.Get, requestUri); request.SetRouteData(route.GetRouteData("/", request)); request.SetConfiguration(config); return(request); }
public static IDictionary <string, object> GetRouteDataExtended(this IHttpRoute THIS, string virtualPathRoot, HttpRequestMessage request) { var routeData = THIS.GetRouteData(virtualPathRoot, request); if (routeData == null) { return(new Dictionary <string, object>()); } var result = routeData.Values; foreach (var h in request.Headers) { result.Add(h.Key, h.Value.FirstOrDefault()); } return(result); }
public virtual IHttpRouteData GetRouteData(string virtualPathRoot, HttpRequestMessage request) { var result = _innerRoute.GetRouteData(virtualPathRoot, request); return(result == null ? null : new HttpRouteData(this, new HttpRouteValueDictionary(result.Values))); }