ZhiYeJianKang_PeiXun/cyqdata-master/DotNetCore/System/Web/HttpRequest.cs
2025-02-20 15:41:53 +08:00

272 lines
8.9 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using CYQ.Data;
using Microsoft.AspNetCore.Http;
using System.Collections.Specialized;
using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace System.Web
{
public class HttpRequest
{
Microsoft.AspNetCore.Http.HttpContext context
{
get
{
return HttpContext.contextAccessor.HttpContext;
}
}
Microsoft.AspNetCore.Http.HttpRequest request => context.Request;
internal HttpRequest()
{
}
public string this[string name]
{
get
{
string value = QueryString[name];
if (string.IsNullOrEmpty(value))
{
value = Form[name];
}
return value;
}
}
public NameValueCollection Form
{
get
{
if (context.Items.ContainsKey("RequestForm"))
{
return context.Items["RequestForm"] as NameValueCollection;
}
else
{
NameValueCollection nvc = new NameValueCollection();
if (request.Method == "POST" && request.HasFormContentType && request.Form != null && request.Form.Keys.Count > 0)
{
foreach (string key in request.Form.Keys)
{
nvc.Add(key, request.Form[key]);
}
}
context.Items.Add("RequestForm", nvc);
return nvc;
}
}
}
public HttpFileCollection Files
{
get
{
if (context.Items.ContainsKey("RequestFiles"))
{
return context.Items["RequestFiles"] as HttpFileCollection;
}
else
{
HttpFileCollection files = new HttpFileCollection();
if (request.Method == "POST" && request.HasFormContentType && request.Form != null
&& request.Form.Files != null && request.Form.Files.Count > 0)
{
foreach (IFormFile file in request.Form.Files)
{
files.Add(new HttpPostedFile(file), file.Name);
}
}
context.Items.Add("RequestFiles", files);
return files;
}
}
}
public NameValueCollection QueryString
{
get
{
if (context.Items.ContainsKey("RequestQueryString"))
{
return context.Items["RequestQueryString"] as NameValueCollection;
}
else
{
NameValueCollection nvc = new NameValueCollection();
if (request.Query != null && request.Query.Keys.Count > 0)
{
foreach (string key in request.Query.Keys)
{
nvc.Add(key, request.Query[key]);
}
}
context.Items.Add("RequestQueryString", nvc);
return nvc;
}
}
}
public HttpCookieCollection Cookies
{
get
{
if (context.Items.ContainsKey("RequestCookies"))
{
return context.Items["RequestCookies"] as HttpCookieCollection;
}
else
{
HttpCookieCollection nvc = new HttpCookieCollection(false);
if (request.Cookies != null && request.Cookies.Keys.Count > 0)
{
foreach (string key in request.Cookies.Keys)
{
HttpCookie cookie = new HttpCookie(key, request.Cookies[key]);
nvc.Add(cookie);
}
}
context.Items.Add("RequestCookies", nvc);
return nvc;
}
}
}
public string[] UserLanguages
{
get
{
string lang = request.Headers["Accept-Language"];
if (!string.IsNullOrEmpty(lang))
{
return lang.Split(',');
}
return null;
}
}
public string RawUrl
{
get
{
return new StringBuilder()
.Append(request.PathBase)
.Append(request.Path.Value.Split('?')[0])
.Append(request.QueryString).ToString();
}
}
public Uri Url
{
get
{
//涉及Url重写时不能缓存。
string url = new StringBuilder()
.Append(request.Scheme)
.Append("://")
.Append(request.Host)
.Append(request.PathBase)
.Append(request.Path.Value.Split('?')[0])
.Append(request.QueryString).ToString();
return new Uri(url);
}
}
public Uri UrlReferrer
{
get
{
Uri uri = null;
string referer = request.Headers["Referer"];
if (!string.IsNullOrEmpty(referer))
{
uri = new Uri(referer);
}
return uri;
}
}
public string UserHostAddress
{
get
{
string[] items = context.Connection.RemoteIpAddress.ToString().Split(':');//::1 ip6 localhost,127.0.0.1 ip4 localhost
return items[items.Length - 1] == "1" ? "127.0.0.1" : items[items.Length - 1];
}
}
public string UserAgent
{
get
{
return request.Headers["User-Agent"];
}
}
public string HttpMethod { get => request.Method; set => request.Method = value; }
//public string Method { get => request.Method; set => request.Method=value; }
public string Scheme { get => request.Scheme; set => request.Scheme = value; }
public bool IsHttps { get => request.IsHttps; set => request.IsHttps = value; }
public HostString Host { get => request.Host; set => request.Host = value; }
public PathString PathBase { get => request.PathBase; set => request.PathBase = value; }
public PathString Path { get => request.Path; set => request.Path = value; }
public IQueryCollection Query { get => request.Query; set => request.Query = value; }
public string Protocol { get => request.Protocol; set => request.Protocol = value; }
public NameValueCollection Headers
{
get
{
if (context.Items.ContainsKey("RequestHeaders"))
{
return context.Items["RequestHeaders"] as NameValueCollection;
}
else
{
NameValueCollection nvc = new NameValueCollection();
if (request.Headers != null && request.Headers.Keys.Count > 0)
{
foreach (string key in request.Headers.Keys)
{
nvc.Add(key, request.Headers[key].ToString());
}
}
context.Items.Add("RequestHeaders", nvc);
return nvc;
}
}
}
public NameValueCollection ServerVariables
{
get
{
NameValueCollection nvc = new NameValueCollection();
nvc.Add("REMOTE_ADDR", UserHostAddress);
nvc.Add("REMOTE_PORT", context.Connection.RemotePort.ToString());
return nvc;
}
}
public long? ContentLength { get => request.ContentLength ?? 0; set => request.ContentLength = value; }
public string ContentType { get => request.ContentType; set => request.ContentType = value; }
public Stream InputStream => Body;
public Stream Body { get => request.Body; set => request.Body = value; }
public bool HasFormContentType => request.HasFormContentType;
public Task<IFormCollection> ReadFormAsync(CancellationToken cancellationToken = default(CancellationToken))
{
return request.ReadFormAsync(cancellationToken = default(CancellationToken));
}
public string CurrentExecutionFilePathExtension
{
get
{
return IO.Path.GetExtension(request.Path);
}
}
}
}