#80 - Add CancellationToken to GetClientCertAsyc, GetFormAsync.
This commit is contained in:
parent
82f72581c9
commit
ff31b958fe
|
|
@ -63,10 +63,19 @@ namespace Microsoft.AspNet.Http
|
|||
public abstract IReadableStringCollection Query { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the query value collection form collection.
|
||||
/// Gets the form collection.
|
||||
/// </summary>
|
||||
/// <returns>The form collection parsed from the request body.</returns>
|
||||
public abstract Task<IReadableStringCollection> GetFormAsync();
|
||||
public virtual Task<IReadableStringCollection> GetFormAsync()
|
||||
{
|
||||
return GetFormAsync(CancellationToken.None);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the form collection.
|
||||
/// </summary>
|
||||
/// <returns>The form collection parsed from the request body.</returns>
|
||||
public abstract Task<IReadableStringCollection> GetFormAsync(CancellationToken cancel);
|
||||
|
||||
/// <summary>
|
||||
/// Gets or set the owin.RequestProtocol.
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.Framework.Runtime;
|
||||
|
||||
|
|
@ -19,6 +20,6 @@ namespace Microsoft.AspNet.HttpFeature
|
|||
/// Asynchronously retrieves the client certificate, if any.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
Task<X509Certificate> GetClientCertificateAsync();
|
||||
Task<X509Certificate> GetClientCertificateAsync(CancellationToken cancel);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,7 +69,8 @@ namespace Microsoft.AspNet.Owin
|
|||
{
|
||||
_entries.Add(OwinConstants.CommonKeys.ClientCertificate, new FeatureMap<IHttpClientCertificateFeature>(feature => feature.ClientCertificate,
|
||||
(feature, value) => feature.ClientCertificate = (X509Certificate)value));
|
||||
_entries.Add(OwinConstants.CommonKeys.LoadClientCertAsync, new FeatureMap<IHttpClientCertificateFeature>(feature => new Func<Task>(feature.GetClientCertificateAsync)));
|
||||
_entries.Add(OwinConstants.CommonKeys.LoadClientCertAsync, new FeatureMap<IHttpClientCertificateFeature>(
|
||||
feature => new Func<Task>(() => feature.GetClientCertificateAsync(CancellationToken.None))));
|
||||
}
|
||||
|
||||
_context.Items[typeof(HttpContext).FullName] = _context; // Store for lookup when we transition back out of OWIN
|
||||
|
|
|
|||
|
|
@ -203,7 +203,7 @@ namespace Microsoft.AspNet.Owin
|
|||
set { Prop(OwinConstants.CommonKeys.ClientCertificate, value); }
|
||||
}
|
||||
|
||||
Task<X509Certificate> IHttpClientCertificateFeature.GetClientCertificateAsync()
|
||||
Task<X509Certificate> IHttpClientCertificateFeature.GetClientCertificateAsync(CancellationToken cancel)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -129,9 +129,9 @@ namespace Microsoft.AspNet.PipelineCore
|
|||
get { return QueryFeature.Query; }
|
||||
}
|
||||
|
||||
public override Task<IReadableStringCollection> GetFormAsync()
|
||||
public override Task<IReadableStringCollection> GetFormAsync(CancellationToken cancel)
|
||||
{
|
||||
return FormFeature.GetFormAsync();
|
||||
return FormFeature.GetFormAsync(cancel);
|
||||
}
|
||||
|
||||
public override string Protocol
|
||||
|
|
|
|||
|
|
@ -3,9 +3,10 @@
|
|||
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNet.Http;
|
||||
using Microsoft.AspNet.FeatureModel;
|
||||
using Microsoft.AspNet.Http;
|
||||
using Microsoft.AspNet.HttpFeature;
|
||||
using Microsoft.AspNet.PipelineCore.Collections;
|
||||
using Microsoft.AspNet.PipelineCore.Infrastructure;
|
||||
|
|
@ -24,14 +25,22 @@ namespace Microsoft.AspNet.PipelineCore
|
|||
_features = features;
|
||||
}
|
||||
|
||||
public async Task<IReadableStringCollection> GetFormAsync()
|
||||
public async Task<IReadableStringCollection> GetFormAsync(CancellationToken cancel)
|
||||
{
|
||||
var body = _request.Fetch(_features).Body;
|
||||
|
||||
if (_bodyStream == null || _bodyStream != body)
|
||||
{
|
||||
_bodyStream = body;
|
||||
using (var streamReader = new StreamReader(body, Encoding.UTF8,
|
||||
if (!_bodyStream.CanSeek)
|
||||
{
|
||||
MemoryStream buffer = new MemoryStream();
|
||||
await _bodyStream.CopyToAsync(buffer, 4096, cancel);
|
||||
_bodyStream = buffer;
|
||||
_request.Fetch(_features).Body = _bodyStream;
|
||||
_bodyStream.Seek(0, SeekOrigin.Begin);
|
||||
}
|
||||
using (var streamReader = new StreamReader(_bodyStream, Encoding.UTF8,
|
||||
detectEncodingFromByteOrderMarks: true,
|
||||
bufferSize: 1024, leaveOpen: true))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNet.Http;
|
||||
|
||||
|
|
@ -8,6 +9,6 @@ namespace Microsoft.AspNet.PipelineCore
|
|||
{
|
||||
public interface IFormFeature
|
||||
{
|
||||
Task<IReadableStringCollection> GetFormAsync();
|
||||
Task<IReadableStringCollection> GetFormAsync(CancellationToken cancel);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNet.FeatureModel;
|
||||
using Microsoft.AspNet.HttpFeature;
|
||||
|
|
@ -29,7 +30,7 @@ namespace Microsoft.AspNet.PipelineCore.Tests
|
|||
var provider = new FormFeature(features.Object);
|
||||
|
||||
// Act
|
||||
var formCollection = await provider.GetFormAsync();
|
||||
var formCollection = await provider.GetFormAsync(CancellationToken.None);
|
||||
|
||||
// Assert
|
||||
Assert.Equal("bar", formCollection["foo"]);
|
||||
|
|
@ -53,16 +54,16 @@ namespace Microsoft.AspNet.PipelineCore.Tests
|
|||
var provider = new FormFeature(features.Object);
|
||||
|
||||
// Act - 1
|
||||
var formCollection = await provider.GetFormAsync();
|
||||
var formCollection = await provider.GetFormAsync(CancellationToken.None);
|
||||
|
||||
// Assert - 1
|
||||
Assert.Equal("bar", formCollection["foo"]);
|
||||
Assert.Equal("2", formCollection["baz"]);
|
||||
Assert.Same(formCollection, await provider.GetFormAsync());
|
||||
Assert.Same(formCollection, await provider.GetFormAsync(CancellationToken.None));
|
||||
|
||||
// Act - 2
|
||||
request.SetupGet(r => r.Body).Returns(new MemoryStream(formContent2));
|
||||
formCollection = await provider.GetFormAsync();
|
||||
formCollection = await provider.GetFormAsync(CancellationToken.None);
|
||||
|
||||
// Assert - 2
|
||||
Assert.Equal("value", formCollection["collection2"]);
|
||||
|
|
|
|||
Loading…
Reference in New Issue