React to the string[] -> StringValues changes.
This commit is contained in:
parent
ad029520d9
commit
e84a707160
|
|
@ -3,10 +3,12 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Globalization;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Microsoft.AspNet.Http;
|
using Microsoft.AspNet.Http;
|
||||||
using Microsoft.Framework.Internal;
|
using Microsoft.Framework.Internal;
|
||||||
using Microsoft.Framework.OptionsModel;
|
using Microsoft.Framework.OptionsModel;
|
||||||
|
using Microsoft.Framework.Primitives;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Cors.Core
|
namespace Microsoft.AspNet.Cors.Core
|
||||||
{
|
{
|
||||||
|
|
@ -33,7 +35,7 @@ namespace Microsoft.AspNet.Cors.Core
|
||||||
/// <param name="requestContext"></param>
|
/// <param name="requestContext"></param>
|
||||||
/// <param name="policyName"></param>
|
/// <param name="policyName"></param>
|
||||||
/// <returns>A <see cref="CorsResult"/> which contains the result of policy evaluation and can be
|
/// <returns>A <see cref="CorsResult"/> which contains the result of policy evaluation and can be
|
||||||
/// used by the caller to set apporpriate response headers.</returns>
|
/// used by the caller to set appropriate response headers.</returns>
|
||||||
public CorsResult EvaluatePolicy([NotNull] HttpContext context, string policyName)
|
public CorsResult EvaluatePolicy([NotNull] HttpContext context, string policyName)
|
||||||
{
|
{
|
||||||
var policy = _options.GetPolicy(policyName);
|
var policy = _options.GetPolicy(policyName);
|
||||||
|
|
@ -44,9 +46,9 @@ namespace Microsoft.AspNet.Cors.Core
|
||||||
public CorsResult EvaluatePolicy([NotNull] HttpContext context, [NotNull] CorsPolicy policy)
|
public CorsResult EvaluatePolicy([NotNull] HttpContext context, [NotNull] CorsPolicy policy)
|
||||||
{
|
{
|
||||||
var corsResult = new CorsResult();
|
var corsResult = new CorsResult();
|
||||||
var accessControlRequestMethod = context.Request.Headers.Get(CorsConstants.AccessControlRequestMethod);
|
var accessControlRequestMethod = context.Request.Headers[CorsConstants.AccessControlRequestMethod];
|
||||||
if (string.Equals(context.Request.Method, CorsConstants.PreflightHttpMethod, StringComparison.Ordinal) &&
|
if (string.Equals(context.Request.Method, CorsConstants.PreflightHttpMethod, StringComparison.Ordinal) &&
|
||||||
accessControlRequestMethod != null)
|
!StringValues.IsNullOrEmpty(accessControlRequestMethod))
|
||||||
{
|
{
|
||||||
EvaluatePreflightRequest(context, policy, corsResult);
|
EvaluatePreflightRequest(context, policy, corsResult);
|
||||||
}
|
}
|
||||||
|
|
@ -60,8 +62,8 @@ namespace Microsoft.AspNet.Cors.Core
|
||||||
|
|
||||||
public virtual void EvaluateRequest(HttpContext context, CorsPolicy policy, CorsResult result)
|
public virtual void EvaluateRequest(HttpContext context, CorsPolicy policy, CorsResult result)
|
||||||
{
|
{
|
||||||
var origin = context.Request.Headers.Get(CorsConstants.Origin);
|
var origin = context.Request.Headers[CorsConstants.Origin];
|
||||||
if (origin == null || !policy.AllowAnyOrigin && !policy.Origins.Contains(origin))
|
if (StringValues.IsNullOrEmpty(origin) || !policy.AllowAnyOrigin && !policy.Origins.Contains(origin))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -73,14 +75,14 @@ namespace Microsoft.AspNet.Cors.Core
|
||||||
|
|
||||||
public virtual void EvaluatePreflightRequest(HttpContext context, CorsPolicy policy, CorsResult result)
|
public virtual void EvaluatePreflightRequest(HttpContext context, CorsPolicy policy, CorsResult result)
|
||||||
{
|
{
|
||||||
var origin = context.Request.Headers.Get(CorsConstants.Origin);
|
var origin = context.Request.Headers[CorsConstants.Origin];
|
||||||
if (origin == null || !policy.AllowAnyOrigin && !policy.Origins.Contains(origin))
|
if (StringValues.IsNullOrEmpty(origin) || !policy.AllowAnyOrigin && !policy.Origins.Contains(origin))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var accessControlRequestMethod = context.Request.Headers.Get(CorsConstants.AccessControlRequestMethod);
|
var accessControlRequestMethod = context.Request.Headers[CorsConstants.AccessControlRequestMethod];
|
||||||
if (accessControlRequestMethod == null)
|
if (StringValues.IsNullOrEmpty(accessControlRequestMethod))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -114,17 +116,17 @@ namespace Microsoft.AspNet.Cors.Core
|
||||||
|
|
||||||
if (result.AllowedOrigin != null)
|
if (result.AllowedOrigin != null)
|
||||||
{
|
{
|
||||||
headers.Add(CorsConstants.AccessControlAllowOrigin, new[] { result.AllowedOrigin });
|
headers[CorsConstants.AccessControlAllowOrigin] = result.AllowedOrigin;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result.VaryByOrigin)
|
if (result.VaryByOrigin)
|
||||||
{
|
{
|
||||||
headers.Set("Vary", "Origin");
|
headers["Vary"] = "Origin";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result.SupportsCredentials)
|
if (result.SupportsCredentials)
|
||||||
{
|
{
|
||||||
headers.Add(CorsConstants.AccessControlAllowCredentials, new[] { "true" });
|
headers[CorsConstants.AccessControlAllowCredentials] = "true";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result.AllowedMethods.Count > 0)
|
if (result.AllowedMethods.Count > 0)
|
||||||
|
|
@ -177,9 +179,8 @@ namespace Microsoft.AspNet.Cors.Core
|
||||||
|
|
||||||
if (result.PreflightMaxAge.HasValue)
|
if (result.PreflightMaxAge.HasValue)
|
||||||
{
|
{
|
||||||
headers.Set(
|
headers[CorsConstants.AccessControlMaxAge]
|
||||||
CorsConstants.AccessControlMaxAge,
|
= result.PreflightMaxAge.Value.TotalSeconds.ToString(CultureInfo.InvariantCulture);
|
||||||
result.PreflightMaxAge.Value.TotalSeconds.ToString());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,11 +5,11 @@
|
||||||
"url": "https://github.com/aspnet/cors"
|
"url": "https://github.com/aspnet/cors"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"Microsoft.AspNet.Http.Extensions": "1.0.0-*",
|
||||||
"Microsoft.Framework.Configuration.Abstractions": "1.0.0-*",
|
"Microsoft.Framework.Configuration.Abstractions": "1.0.0-*",
|
||||||
"Microsoft.Framework.DependencyInjection.Abstractions": "1.0.0-*",
|
"Microsoft.Framework.DependencyInjection.Abstractions": "1.0.0-*",
|
||||||
"Microsoft.Framework.OptionsModel": "1.0.0-*",
|
"Microsoft.Framework.NotNullAttribute.Sources": { "version": "1.0.0-*", "type": "build" },
|
||||||
"Microsoft.AspNet.Http": "1.0.0-*",
|
"Microsoft.Framework.OptionsModel": "1.0.0-*"
|
||||||
"Microsoft.Framework.NotNullAttribute.Sources": { "version": "1.0.0-*", "type": "build" }
|
|
||||||
},
|
},
|
||||||
|
|
||||||
"frameworks" : {
|
"frameworks" : {
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,8 @@ using System.Threading.Tasks;
|
||||||
using Microsoft.AspNet.Builder;
|
using Microsoft.AspNet.Builder;
|
||||||
using Microsoft.AspNet.Cors.Core;
|
using Microsoft.AspNet.Cors.Core;
|
||||||
using Microsoft.AspNet.Http;
|
using Microsoft.AspNet.Http;
|
||||||
using Microsoft.AspNet.WebUtilities;
|
|
||||||
using Microsoft.Framework.Internal;
|
using Microsoft.Framework.Internal;
|
||||||
using Microsoft.Framework.OptionsModel;
|
using Microsoft.Framework.Primitives;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Cors
|
namespace Microsoft.AspNet.Cors
|
||||||
{
|
{
|
||||||
|
|
@ -70,12 +69,12 @@ namespace Microsoft.AspNet.Cors
|
||||||
_corsService.ApplyResult(corsResult, context.Response);
|
_corsService.ApplyResult(corsResult, context.Response);
|
||||||
|
|
||||||
var accessControlRequestMethod =
|
var accessControlRequestMethod =
|
||||||
context.Request.Headers.Get(CorsConstants.AccessControlRequestMethod);
|
context.Request.Headers[CorsConstants.AccessControlRequestMethod];
|
||||||
if (string.Equals(
|
if (string.Equals(
|
||||||
context.Request.Method,
|
context.Request.Method,
|
||||||
CorsConstants.PreflightHttpMethod,
|
CorsConstants.PreflightHttpMethod,
|
||||||
StringComparison.Ordinal) &&
|
StringComparison.Ordinal) &&
|
||||||
accessControlRequestMethod != null)
|
!StringValues.IsNullOrEmpty(accessControlRequestMethod))
|
||||||
{
|
{
|
||||||
// Since there is a policy which was identified,
|
// Since there is a policy which was identified,
|
||||||
// always respond to preflight requests.
|
// always respond to preflight requests.
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,6 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Microsoft.AspNet.Cors.Core": "1.0.0-*",
|
"Microsoft.AspNet.Cors.Core": "1.0.0-*",
|
||||||
"Microsoft.AspNet.Http.Extensions": "1.0.0-*",
|
|
||||||
"Microsoft.AspNet.WebUtilities": "1.0.0-*",
|
|
||||||
"Microsoft.Framework.NotNullAttribute.Sources": { "version": "1.0.0-*", "type": "build" }
|
"Microsoft.Framework.NotNullAttribute.Sources": { "version": "1.0.0-*", "type": "build" }
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Linq;
|
||||||
using Microsoft.AspNet.Http;
|
using Microsoft.AspNet.Http;
|
||||||
using Microsoft.AspNet.Http.Internal;
|
using Microsoft.AspNet.Http.Internal;
|
||||||
using Microsoft.Framework.OptionsModel;
|
using Microsoft.Framework.OptionsModel;
|
||||||
|
|
@ -645,7 +646,7 @@ namespace Microsoft.AspNet.Cors.Core.Test
|
||||||
Assert.Contains("Access-Control-Allow-Methods", httpContext.Response.Headers.Keys);
|
Assert.Contains("Access-Control-Allow-Methods", httpContext.Response.Headers.Keys);
|
||||||
var value = Assert.Single(httpContext.Response.Headers.Values);
|
var value = Assert.Single(httpContext.Response.Headers.Values);
|
||||||
Assert.Equal(new[] { "PUT,DELETE" }, value);
|
Assert.Equal(new[] { "PUT,DELETE" }, value);
|
||||||
var methods = httpContext.Response.Headers["Access-Control-Allow-Methods"].Split(',');
|
string[] methods = httpContext.Response.Headers.GetCommaSeparatedValues("Access-Control-Allow-Methods");
|
||||||
Assert.Equal(2, methods.Length);
|
Assert.Equal(2, methods.Length);
|
||||||
Assert.Contains("PUT", methods);
|
Assert.Contains("PUT", methods);
|
||||||
Assert.Contains("DELETE", methods);
|
Assert.Contains("DELETE", methods);
|
||||||
|
|
@ -725,7 +726,7 @@ namespace Microsoft.AspNet.Cors.Core.Test
|
||||||
Assert.Contains("Access-Control-Allow-Headers", httpContext.Response.Headers.Keys);
|
Assert.Contains("Access-Control-Allow-Headers", httpContext.Response.Headers.Keys);
|
||||||
var value = Assert.Single(httpContext.Response.Headers.Values);
|
var value = Assert.Single(httpContext.Response.Headers.Values);
|
||||||
Assert.Equal(new[] { "foo,bar,baz" }, value);
|
Assert.Equal(new[] { "foo,bar,baz" }, value);
|
||||||
string[] headerValues = httpContext.Response.Headers["Access-Control-Allow-Headers"].Split(',');
|
string[] headerValues = httpContext.Response.Headers.GetCommaSeparatedValues("Access-Control-Allow-Headers");
|
||||||
Assert.Equal(3, headerValues.Length);
|
Assert.Equal(3, headerValues.Length);
|
||||||
Assert.Contains("foo", headerValues);
|
Assert.Contains("foo", headerValues);
|
||||||
Assert.Contains("bar", headerValues);
|
Assert.Contains("bar", headerValues);
|
||||||
|
|
@ -750,7 +751,7 @@ namespace Microsoft.AspNet.Cors.Core.Test
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Contains("Access-Control-Allow-Headers", httpContext.Response.Headers.Keys);
|
Assert.Contains("Access-Control-Allow-Headers", httpContext.Response.Headers.Keys);
|
||||||
string[] headerValues = httpContext.Response.Headers["Access-Control-Allow-Headers"].Split(',');
|
string[] headerValues = httpContext.Response.Headers.GetCommaSeparatedValues("Access-Control-Allow-Headers");
|
||||||
Assert.Equal(2, headerValues.Length);
|
Assert.Equal(2, headerValues.Length);
|
||||||
Assert.Contains("foo", headerValues);
|
Assert.Contains("foo", headerValues);
|
||||||
Assert.Contains("bar", headerValues);
|
Assert.Contains("bar", headerValues);
|
||||||
|
|
@ -830,7 +831,7 @@ namespace Microsoft.AspNet.Cors.Core.Test
|
||||||
Assert.Contains("Access-Control-Expose-Headers", httpContext.Response.Headers.Keys);
|
Assert.Contains("Access-Control-Expose-Headers", httpContext.Response.Headers.Keys);
|
||||||
var value = Assert.Single(httpContext.Response.Headers.Values);
|
var value = Assert.Single(httpContext.Response.Headers.Values);
|
||||||
Assert.Equal(new[] { "foo,bar,baz" }, value);
|
Assert.Equal(new[] { "foo,bar,baz" }, value);
|
||||||
string[] exposedHeaderValues = httpContext.Response.Headers["Access-Control-Expose-Headers"].Split(',');
|
string[] exposedHeaderValues = httpContext.Response.Headers.GetCommaSeparatedValues("Access-Control-Expose-Headers");
|
||||||
Assert.Equal(3, exposedHeaderValues.Length);
|
Assert.Equal(3, exposedHeaderValues.Length);
|
||||||
Assert.Contains("foo", exposedHeaderValues);
|
Assert.Contains("foo", exposedHeaderValues);
|
||||||
Assert.Contains("bar", exposedHeaderValues);
|
Assert.Contains("bar", exposedHeaderValues);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue