Bumping ASP.Net package to 3.0, implementing async decoding of CloudEvents
Signed-off-by: Tobias Lønnerød Madsen <m@dsen.tv>
This commit is contained in:
parent
9d5c20e00b
commit
aa78505be6
|
@ -1,15 +1,9 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp2.2</TargetFramework>
|
||||
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
|
||||
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AspNetCore.App" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\src\CloudNative.CloudEvents.AspNetCore\CloudNative.CloudEvents.AspNetCore.csproj" />
|
||||
<ProjectReference Include="..\..\src\CloudNative.CloudEvents\CloudNative.CloudEvents.csproj" />
|
||||
|
|
|
@ -9,6 +9,7 @@ namespace CloudNative.CloudEvents.AspNetCoreSample
|
|||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
|
||||
public class Startup
|
||||
{
|
||||
|
@ -22,21 +23,26 @@ namespace CloudNative.CloudEvents.AspNetCoreSample
|
|||
// This method gets called by the runtime. Use this method to add services to the container.
|
||||
public void ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
services.AddMvc(opts =>
|
||||
services.AddControllers(opts =>
|
||||
{
|
||||
opts.InputFormatters.Insert(0, new CloudEventInputFormatter());
|
||||
});
|
||||
}
|
||||
|
||||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
||||
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
|
||||
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
|
||||
{
|
||||
if (env.IsDevelopment())
|
||||
{
|
||||
app.UseDeveloperExceptionPage();
|
||||
}
|
||||
|
||||
app.UseMvc();
|
||||
app.UseRouting();
|
||||
|
||||
app.UseEndpoints(endpoints =>
|
||||
{
|
||||
endpoints.MapControllers();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@ namespace CloudNative.CloudEvents
|
|||
SupportedEncodings.Add(Encoding.Unicode);
|
||||
}
|
||||
|
||||
public override Task<InputFormatterResult> ReadRequestBodyAsync(InputFormatterContext context, Encoding encoding)
|
||||
public override async Task<InputFormatterResult> ReadRequestBodyAsync(InputFormatterContext context, Encoding encoding)
|
||||
{
|
||||
if (context == null)
|
||||
{
|
||||
|
@ -37,12 +37,12 @@ namespace CloudNative.CloudEvents
|
|||
|
||||
try
|
||||
{
|
||||
var cloudEvent = request.ToCloudEvent();
|
||||
return InputFormatterResult.SuccessAsync(cloudEvent);
|
||||
var cloudEvent = await request.ReadCloudEventAsync();
|
||||
return await InputFormatterResult.SuccessAsync(cloudEvent);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return InputFormatterResult.FailureAsync();
|
||||
return await InputFormatterResult.FailureAsync();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@ namespace CloudNative.CloudEvents
|
|||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Net.Mime;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
public static class HttpRequestExtension
|
||||
{
|
||||
|
@ -26,10 +27,10 @@ namespace CloudNative.CloudEvents
|
|||
/// <param name="httpRequest">HTTP request</param>
|
||||
/// <param name="extensions">List of extension instances</param>
|
||||
/// <returns>A CloudEvent instance or 'null' if the request message doesn't hold a CloudEvent</returns>
|
||||
public static CloudEvent ToCloudEvent(this HttpRequest httpRequest,
|
||||
public static ValueTask<CloudEvent> ReadCloudEventAsync(this HttpRequest httpRequest,
|
||||
params ICloudEventExtension[] extensions)
|
||||
{
|
||||
return ToCloudEvent(httpRequest, null, extensions);
|
||||
return ReadCloudEventAsync(httpRequest, null, extensions);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -40,7 +41,7 @@ namespace CloudNative.CloudEvents
|
|||
/// <param name="formatter"></param>
|
||||
/// <param name="extensions">List of extension instances</param>
|
||||
/// <returns>A CloudEvent instance or 'null' if the request message doesn't hold a CloudEvent</returns>
|
||||
public static CloudEvent ToCloudEvent(this HttpRequest httpRequest,
|
||||
public static async ValueTask<CloudEvent> ReadCloudEventAsync(this HttpRequest httpRequest,
|
||||
ICloudEventFormatter formatter = null,
|
||||
params ICloudEventExtension[] extensions)
|
||||
{
|
||||
|
@ -63,7 +64,7 @@ namespace CloudNative.CloudEvents
|
|||
}
|
||||
}
|
||||
|
||||
return formatter.DecodeStructuredEvent(httpRequest.Body, extensions);
|
||||
return await formatter.DecodeStructuredEventAsync(httpRequest.Body, extensions);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -103,7 +104,9 @@ namespace CloudNative.CloudEvents
|
|||
if (httpRequestHeader.StartsWith(HttpHeaderPrefix, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
string headerValue = httpRequest.Headers[httpRequestHeader];
|
||||
if (headerValue.StartsWith("{") && headerValue.EndsWith("}") ||
|
||||
// maps in headers have been abolished in 1.0
|
||||
if (version != CloudEventsSpecVersion.V1_0 &&
|
||||
headerValue.StartsWith("{") && headerValue.EndsWith("}") ||
|
||||
headerValue.StartsWith("[") && headerValue.EndsWith("]"))
|
||||
{
|
||||
attributes[httpRequestHeader.Substring(3)] =
|
||||
|
@ -112,7 +115,6 @@ namespace CloudNative.CloudEvents
|
|||
else
|
||||
{
|
||||
attributes[httpRequestHeader.Substring(3)] = headerValue;
|
||||
attributes[httpRequestHeader.Substring(3)] = headerValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -124,6 +126,5 @@ namespace CloudNative.CloudEvents
|
|||
return cloudEvent;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ namespace CloudNative.CloudEvents
|
|||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Net.Mime;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
|
||||
/// <summary>
|
||||
|
@ -22,6 +23,13 @@ namespace CloudNative.CloudEvents
|
|||
/// <returns></returns>
|
||||
CloudEvent DecodeStructuredEvent(Stream data, IEnumerable<ICloudEventExtension> extensions);
|
||||
/// <summary>
|
||||
/// Decode a structured event from a stream asynchonously
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
/// <param name="extensions"></param>
|
||||
/// <returns></returns>
|
||||
Task<CloudEvent> DecodeStructuredEventAsync(Stream data, IEnumerable<ICloudEventExtension> extensions);
|
||||
/// <summary>
|
||||
/// Decode a structured event from a byte array
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
|
|
|
@ -5,12 +5,12 @@
|
|||
namespace CloudNative.CloudEvents
|
||||
{
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net.Mime;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
|
@ -27,6 +27,13 @@ namespace CloudNative.CloudEvents
|
|||
return DecodeStructuredEvent(data, (IEnumerable<ICloudEventExtension>)extensions);
|
||||
}
|
||||
|
||||
public async Task<CloudEvent> DecodeStructuredEventAsync(Stream data, IEnumerable<ICloudEventExtension> extensions)
|
||||
{
|
||||
var jsonReader = new JsonTextReader(new StreamReader(data, Encoding.UTF8, true, 8192, true));
|
||||
var jObject = await JObject.LoadAsync(jsonReader);
|
||||
return DecodeJObject(jObject, extensions);
|
||||
}
|
||||
|
||||
public CloudEvent DecodeStructuredEvent(Stream data, IEnumerable<ICloudEventExtension> extensions = null)
|
||||
{
|
||||
var jsonReader = new JsonTextReader(new StreamReader(data, Encoding.UTF8, true, 8192, true));
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp2.2</TargetFramework>
|
||||
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AspNetCore.App" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="2.2.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.0.1" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="3.0.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
|
||||
<PackageReference Include="xunit" Version="2.4.0" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.0" />
|
||||
</ItemGroup>
|
||||
|
|
Loading…
Reference in New Issue