192 lines
5.6 KiB
C#
192 lines
5.6 KiB
C#
// Copyright (c) .NET Foundation. All rights reserved.
|
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
|
|
using System;
|
|
using System.IO;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.AspNet.Http.Features;
|
|
using Microsoft.AspNet.Http.Features.Internal;
|
|
using Microsoft.Net.Http.Headers;
|
|
|
|
namespace Microsoft.AspNet.Http.Internal
|
|
{
|
|
public class DefaultHttpRequest : HttpRequest, IFeatureCache
|
|
{
|
|
private readonly DefaultHttpContext _context;
|
|
private readonly IFeatureCollection _features;
|
|
private int _cachedFeaturesRevision = -1;
|
|
|
|
private IHttpRequestFeature _request;
|
|
private IQueryFeature _query;
|
|
private IFormFeature _form;
|
|
private IRequestCookiesFeature _cookies;
|
|
|
|
public DefaultHttpRequest(DefaultHttpContext context, IFeatureCollection features)
|
|
{
|
|
_context = context;
|
|
_features = features;
|
|
}
|
|
|
|
void IFeatureCache.CheckFeaturesRevision()
|
|
{
|
|
if (_cachedFeaturesRevision != _features.Revision)
|
|
{
|
|
_request = null;
|
|
_query = null;
|
|
_form = null;
|
|
_cookies = null;
|
|
_cachedFeaturesRevision = _features.Revision;
|
|
}
|
|
}
|
|
|
|
private IHttpRequestFeature HttpRequestFeature
|
|
{
|
|
get { return FeatureHelpers.GetAndCache(this, _features, ref _request); }
|
|
}
|
|
|
|
private IQueryFeature QueryFeature
|
|
{
|
|
get
|
|
{
|
|
return FeatureHelpers.GetOrCreateAndCache(
|
|
this,
|
|
_features,
|
|
(f) => new QueryFeature(f),
|
|
ref _query);
|
|
}
|
|
}
|
|
|
|
private IFormFeature FormFeature
|
|
{
|
|
get
|
|
{
|
|
return FeatureHelpers.GetOrCreateAndCache(
|
|
this,
|
|
_features,
|
|
this,
|
|
(r) => new FormFeature(r),
|
|
ref _form);
|
|
}
|
|
}
|
|
|
|
private IRequestCookiesFeature RequestCookiesFeature
|
|
{
|
|
get
|
|
{
|
|
return FeatureHelpers.GetOrCreateAndCache(
|
|
this,
|
|
_features,
|
|
(f) => new RequestCookiesFeature(f),
|
|
ref _cookies);
|
|
}
|
|
}
|
|
|
|
public override HttpContext HttpContext { get { return _context; } }
|
|
|
|
public override PathString PathBase
|
|
{
|
|
get { return new PathString(HttpRequestFeature.PathBase); }
|
|
set { HttpRequestFeature.PathBase = value.Value; }
|
|
}
|
|
|
|
public override PathString Path
|
|
{
|
|
get { return new PathString(HttpRequestFeature.Path); }
|
|
set { HttpRequestFeature.Path = value.Value; }
|
|
}
|
|
|
|
public override QueryString QueryString
|
|
{
|
|
get { return new QueryString(HttpRequestFeature.QueryString); }
|
|
set { HttpRequestFeature.QueryString = value.Value; }
|
|
}
|
|
|
|
public override long? ContentLength
|
|
{
|
|
get
|
|
{
|
|
return ParsingHelpers.GetContentLength(Headers);
|
|
}
|
|
set
|
|
{
|
|
ParsingHelpers.SetContentLength(Headers, value);
|
|
}
|
|
}
|
|
|
|
public override Stream Body
|
|
{
|
|
get { return HttpRequestFeature.Body; }
|
|
set { HttpRequestFeature.Body = value; }
|
|
}
|
|
|
|
public override string Method
|
|
{
|
|
get { return HttpRequestFeature.Method; }
|
|
set { HttpRequestFeature.Method = value; }
|
|
}
|
|
|
|
public override string Scheme
|
|
{
|
|
get { return HttpRequestFeature.Scheme; }
|
|
set { HttpRequestFeature.Scheme = value; }
|
|
}
|
|
|
|
public override bool IsHttps
|
|
{
|
|
get { return string.Equals(Constants.Https, Scheme, StringComparison.OrdinalIgnoreCase); }
|
|
set { Scheme = value ? Constants.Https : Constants.Http; }
|
|
}
|
|
|
|
public override HostString Host
|
|
{
|
|
get { return HostString.FromUriComponent(Headers["Host"].ToString()); }
|
|
set { Headers["Host"] = value.ToUriComponent(); }
|
|
}
|
|
|
|
public override IQueryCollection Query
|
|
{
|
|
get { return QueryFeature.Query; }
|
|
set { QueryFeature.Query = value; }
|
|
}
|
|
|
|
public override string Protocol
|
|
{
|
|
get { return HttpRequestFeature.Protocol; }
|
|
set { HttpRequestFeature.Protocol = value; }
|
|
}
|
|
|
|
public override IHeaderDictionary Headers
|
|
{
|
|
get { return HttpRequestFeature.Headers; }
|
|
}
|
|
|
|
public override IRequestCookieCollection Cookies
|
|
{
|
|
get { return RequestCookiesFeature.Cookies; }
|
|
set { RequestCookiesFeature.Cookies = value; }
|
|
}
|
|
|
|
public override string ContentType
|
|
{
|
|
get { return Headers[HeaderNames.ContentType]; }
|
|
set { Headers[HeaderNames.ContentType] = value; }
|
|
}
|
|
|
|
public override bool HasFormContentType
|
|
{
|
|
get { return FormFeature.HasFormContentType; }
|
|
}
|
|
|
|
public override IFormCollection Form
|
|
{
|
|
get { return FormFeature.ReadForm(); }
|
|
set { FormFeature.Form = value; }
|
|
}
|
|
|
|
public override Task<IFormCollection> ReadFormAsync(CancellationToken cancellationToken)
|
|
{
|
|
return FormFeature.ReadFormAsync(cancellationToken);
|
|
}
|
|
}
|
|
} |