Merge pull request #39 from TobbenTM/fix-http-header-value-mapping
Now URL-encoding and decoding header values
This commit is contained in:
commit
0959b118e2
|
@ -9,6 +9,7 @@ namespace CloudNative.CloudEvents
|
|||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Net.Mime;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
@ -106,7 +107,7 @@ namespace CloudNative.CloudEvents
|
|||
|
||||
if (httpRequestHeader.StartsWith(HttpHeaderPrefix, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
string headerValue = httpRequest.Headers[httpRequestHeader];
|
||||
string headerValue = WebUtility.UrlDecode(httpRequest.Headers[httpRequestHeader]);
|
||||
// maps in headers have been abolished in 1.0
|
||||
if (version != CloudEventsSpecVersion.V1_0 &&
|
||||
headerValue.StartsWith("{") && headerValue.EndsWith("}") ||
|
||||
|
|
|
@ -84,7 +84,7 @@ namespace CloudNative.CloudEvents
|
|||
{
|
||||
if (attribute.Value is string)
|
||||
{
|
||||
Headers.Add("ce-" + attribute.Key, attribute.Value.ToString());
|
||||
Headers.Add("ce-" + attribute.Key, WebUtility.UrlEncode(attribute.Value.ToString()));
|
||||
}
|
||||
else if (attribute.Value is DateTime)
|
||||
{
|
||||
|
@ -97,8 +97,9 @@ namespace CloudNative.CloudEvents
|
|||
else
|
||||
{
|
||||
Headers.Add("ce-" + attribute.Key,
|
||||
Encoding.UTF8.GetString(jsonFormatter.EncodeAttribute(cloudEvent.SpecVersion, attribute.Key, attribute.Value,
|
||||
cloudEvent.Extensions.Values)));
|
||||
WebUtility.UrlEncode(
|
||||
Encoding.UTF8.GetString(jsonFormatter.EncodeAttribute(cloudEvent.SpecVersion, attribute.Key, attribute.Value,
|
||||
cloudEvent.Extensions.Values))));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ namespace CloudNative.CloudEvents.IntegrationTests.AspNetCore
|
|||
// Arrange
|
||||
var expectedExtensionKey = "comexampleextension1";
|
||||
var expectedExtensionValue = Guid.NewGuid().ToString();
|
||||
var cloudEvent = new CloudEvent("test-type", new Uri("urn:integration-tests"))
|
||||
var cloudEvent = new CloudEvent("test-type-æøå", new Uri("urn:integration-tests"))
|
||||
{
|
||||
Id = Guid.NewGuid().ToString(),
|
||||
};
|
||||
|
@ -45,6 +45,7 @@ namespace CloudNative.CloudEvents.IntegrationTests.AspNetCore
|
|||
// Assert
|
||||
Assert.Equal(HttpStatusCode.OK, result.StatusCode);
|
||||
Assert.Contains(cloudEvent.Id, await result.Content.ReadAsStringAsync());
|
||||
Assert.Contains(cloudEvent.Type, await result.Content.ReadAsStringAsync());
|
||||
Assert.Contains($"\"{expectedExtensionKey}\":\"{expectedExtensionValue}\"", await result.Content.ReadAsStringAsync());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -276,7 +276,8 @@ namespace CloudNative.CloudEvents.UnitTests
|
|||
|
||||
var attrs = cloudEvent.GetAttributes();
|
||||
attrs["comexampleextension1"] = "value";
|
||||
|
||||
attrs["utf8examplevalue"] = "æøå";
|
||||
|
||||
string ctx = Guid.NewGuid().ToString();
|
||||
var content = new CloudEventContent(cloudEvent, ContentMode.Structured, new JsonEventFormatter());
|
||||
content.Headers.Add(testContextHeader, ctx);
|
||||
|
@ -298,6 +299,8 @@ namespace CloudNative.CloudEvents.UnitTests
|
|||
|
||||
var attr = receivedCloudEvent.GetAttributes();
|
||||
Assert.Equal("value", (string)attr["comexampleextension1"]);
|
||||
Assert.Equal("%C3%A6%C3%B8%C3%A5", content.Headers.Single(h => h.Key == "ce-utf8examplevalue").Value.Single());
|
||||
Assert.Equal("æøå", (string)attr["utf8examplevalue"]);
|
||||
context.Response.StatusCode = (int)HttpStatusCode.NoContent;
|
||||
}
|
||||
catch (Exception e)
|
||||
|
|
Loading…
Reference in New Issue