public DefaultHttpRequest(HttpContext context) { _context = context; //_features = context.HttpContextFeatures; this.RequestFeature = context.HttpContextFeatures.Get <IHttpRequestFeature>(); _formFeature = new FormFeature(this); }
internal RequestState(IHttpRequestFeature requestFeature, IHttpContextFactory factory, IFeatureCollection featureCollection) { _factory = factory; _requestAbortedSource = new CancellationTokenSource(); _pipelineFinished = false; var contextFeatures = new FeatureCollection(featureCollection); contextFeatures.Set(requestFeature); _responseStream = new WriteOnlyResponseStream(AbortRequest); _responseFeature = new ResponseFeature(requestFeature.Protocol, 200, null, _responseStream, new HeaderDictionary()) { Abort = Abort }; contextFeatures.Set <IHttpResponseFeature>(_responseFeature); contextFeatures.Set <IHttpResponseBodyFeature>(new StreamResponseBodyFeature(_responseStream)); var requestLifetimeFeature = new HttpRequestLifetimeFeature(); contextFeatures.Set <IHttpRequestLifetimeFeature>(requestLifetimeFeature); requestLifetimeFeature.RequestAborted = _requestAbortedSource.Token; Context = _factory.Create(contextFeatures); }
/// <summary> /// /// </summary> /// <param name="areaName">The name of the area containing the Emails view folder if applicable</param> /// <returns></returns> #if ASPNET5 ActionContext CreateControllerContext(string areaName, IHttpRequestFeature requsetFeature) { var routeData = new Microsoft.AspNetCore.Routing.RouteData(); routeData.Values["controller"] = EmailViewDirectoryName; // if populated will add searching the named Area for the view if (!string.IsNullOrWhiteSpace(areaName)) { routeData.DataTokens["Area"] = areaName; } var actionDescriptor = new ActionDescriptor(); actionDescriptor.RouteValues = routeData.Values.ToDictionary(kv => kv.Key, kv => kv.Value.ToString()); FeatureCollection featureCollection = new FeatureCollection(); var requsetFeature_local = new HttpRequestFeature(); requsetFeature_local.Method = "GET"; requsetFeature_local.Protocol = requsetFeature?.Protocol; requsetFeature_local.PathBase = requsetFeature?.PathBase; requsetFeature_local.Scheme = requsetFeature?.Scheme; featureCollection.Set <IHttpRequestFeature>(requsetFeature_local); featureCollection.Set <IHttpResponseFeature>(new HttpResponseFeature()); var httpContext = new DefaultHttpContext(featureCollection); httpContext.RequestServices = serviceProvider; var actionContext = new ActionContext(httpContext, routeData, actionDescriptor); actionContext.RouteData = routeData; return(actionContext); }
public static async Task <RenderToStringResult> Prerender(this HttpRequest trans) { // Grab key website data that will be serialized for use in universal rendering INodeServices node = trans.HttpContext.RequestServices.GetRequiredService <INodeServices>( ); IHostingEnvironment zone = trans.HttpContext.RequestServices.GetRequiredService <IHostingEnvironment>( ); IHttpRequestFeature item = trans.HttpContext.Features.Get <IHttpRequestFeature>( ); // Identify web app's host and subroute to target for prerending server-side string root = zone.ContentRootPath; string path = item.RawTarget; // Build out the url from the previous parameters for prerendering it's content string url = $"{ trans.Scheme }://{ trans.Host }{ path }"; // Allow for the passing of custom data as a request for the frontend app TransferData data = new TransferData( ); // Customized data sent to the frontend is sent through here as a parameter // Feel free to add more custom data here through TransferData class fields data.elements = trans.Decode( ); data.thisCameFromDotNET = "The server beckons thee!!!"; // Requires a cancellation token for performing universal app prerendering CancellationTokenSource origin = new CancellationTokenSource( ); CancellationToken exe = origin.Token; // Locate the generated server-side bundle used for the initial prerendering JavaScriptModuleExport js = new JavaScriptModuleExport(root + "/Node/server.bundle"); // Serialize and prerender the frontend app as a universal/isomorphic one return(await Prerenderer.RenderToString("/", node, exe, js, url, path, data, 30000, trans.PathBase.ToString( ))); }
internal RequestState(IHttpRequestFeature requestFeature, IHttpContextFactory factory, IFeatureCollection featureCollection) { _factory = factory; _requestAbortedSource = new CancellationTokenSource(); _pipelineFinished = false; var contextFeatures = new FeatureCollection(featureCollection); contextFeatures.Set(requestFeature); _responseFeature = new ResponseFeature { Protocol = requestFeature.Protocol }; contextFeatures.Set <IHttpResponseFeature>(_responseFeature); var requestLifetimeFeature = new HttpRequestLifetimeFeature(); contextFeatures.Set <IHttpRequestLifetimeFeature>(requestLifetimeFeature); _responseStream = new WriteOnlyResponseStream(AbortRequest); _responseFeature.Body = _responseStream; _responseFeature.StatusCode = 200; requestLifetimeFeature.RequestAborted = _requestAbortedSource.Token; Context = _factory.Create(contextFeatures); }
public static HttpRequest ParseRequest(IHttpRequestFeature _requestFeature) { return(new(QueryString.FromUriComponent(_requestFeature.QueryString), new HttpMethod(_requestFeature.Method), _requestFeature.Path, _requestFeature.Body)); }
protected override void PostMarshallRequestFeature( IHttpRequestFeature aspNetCoreRequestFeature, APIGatewayProxyRequest apiGatewayRequest, ILambdaContext lambdaContext) { aspNetCoreRequestFeature.PathBase = ""; aspNetCoreRequestFeature.Path = apiGatewayRequest.Path; }
void IFeatureCache.CheckFeaturesRevision() { if (_cachedFeaturesRevision != _features.Revision) { _request = null; _cachedFeaturesRevision = _features.Revision; } }
internal WebContext(IFeatureCollection features) { this.features = features; connection = new DefaultConnectionInfo(features); fRequest = features.Get <IHttpRequestFeature>(); fRequestCookies = new RequestCookiesFeature(features); fResponse = features.Get <IHttpResponseFeature>(); fWebSocket = features.Get <IHttpWebSocketFeature>(); }
/// <summary> /// Convert the JSON document received from API Gateway in the ASP.NET Core IHttpRequestFeature object. /// IHttpRequestFeature is then passed into IHttpApplication to create the ASP.NET Core request objects. /// </summary> /// <param name="requestFeatures"></param> /// <param name="apiGatewayRequest"></param> protected void MarshallRequest(IHttpRequestFeature requestFeatures, APIGatewayProxyRequest apiGatewayRequest) { requestFeatures.Scheme = "https"; requestFeatures.Path = apiGatewayRequest.Path; requestFeatures.Method = apiGatewayRequest.HttpMethod; // API Gateway delivers the query string in a dictionary but must be reconstructed into the full query string // before passing into ASP.NET Core framework. var queryStringParameters = apiGatewayRequest.QueryStringParameters; if (queryStringParameters != null) { StringBuilder sb = new StringBuilder("?"); var encoder = UrlEncoder.Default; foreach (var kvp in queryStringParameters) { if (sb.Length > 1) { sb.Append("&"); } sb.Append($"{encoder.Encode(kvp.Key)}={encoder.Encode(kvp.Value.ToString())}"); } requestFeatures.QueryString = sb.ToString(); } var headers = apiGatewayRequest.Headers; if (headers != null) { foreach (var kvp in headers) { requestFeatures.Headers[kvp.Key] = kvp.Value?.ToString(); } } if (!requestFeatures.Headers.ContainsKey("Host")) { var apiId = apiGatewayRequest.RequestContext?.ApiId ?? ""; var stage = apiGatewayRequest.RequestContext?.Stage ?? ""; requestFeatures.Headers["Host"] = $"apigateway-{apiId}-{stage}"; } if (!string.IsNullOrEmpty(apiGatewayRequest.Body)) { Byte[] binaryBody; if (apiGatewayRequest.IsBase64Encoded) { binaryBody = Convert.FromBase64String(apiGatewayRequest.Body); } else { binaryBody = UTF8Encoding.UTF8.GetBytes(apiGatewayRequest.Body); } requestFeatures.Body = new MemoryStream(binaryBody); } }
protected override void PostMarshallRequestFeature( IHttpRequestFeature aspNetCoreRequestFeature, APIGatewayProxyRequest apiGatewayRequest, ILambdaContext lambdaContext) { //The base path mapping gets stripped off in AWS. We still let it strip off but just set it at a different time as an override. aspNetCoreRequestFeature.PathBase = ""; aspNetCoreRequestFeature.Path = apiGatewayRequest.Path; }
private DefaultHttpContext PrepareDefaultHttpContext(IHttpRequestFeature request) { var httpContext = new DefaultHttpContext(); var featureCollection = new FeatureCollection(); featureCollection.Set <IHttpRequestFeature>(request); httpContext.Initialize(featureCollection); return(httpContext); }
void IFeatureCache.CheckFeaturesRevision() { if (_cachedFeaturesRevision != _features.Revision) { _request = null; _query = null; _form = null; _cookies = null; _cachedFeaturesRevision = _features.Revision; } }
public async Task <IHttpResponseFeature> ProcessRequestAsync(IHttpRequestFeature request) { if (_context == null) { throw new InvalidOperationException("Server Not Started"); } var frame = _context.FrameFactory(request); await frame.ProcessRequestAsync(); return(frame.Get <IHttpResponseFeature>()); }
private async Task AssertExecution(IHttpRequestFeature requestFeature, IHttpResponseFeature responseFeature, BatchMiddlewareEvents batchMiddlewareEvents, params ResponseFeature[] responseFeatures) { var featureCollection = new FeatureCollection(); featureCollection.Set(requestFeature); featureCollection.Set(responseFeature); var defaultContext = new DefaultHttpContext(featureCollection); var middleware = CreateMiddleware(CreateRequestDelegate(responseFeatures), batchMiddlewareEvents); await middleware.Invoke(defaultContext).ConfigureAwait(false); }
private bool IsValidForPrerenderPage(HttpRequest request, IHttpRequestFeature requestFeature) { var userAgent = request.Headers[Constants.HttpHeader_UserAgent]; var rawUrl = requestFeature.RawTarget; var relativeUrl = request.Path.ToString(); // check if follows google search engine suggestion if (request.Query.Keys.Any(a => a.Equals(Constants.EscapedFragment, StringComparison.OrdinalIgnoreCase))) { return(true); } // check if has user agent if (string.IsNullOrEmpty(userAgent)) { return(false); } // check if it's crawler user agent. var crawlerUserAgentPattern = string.IsNullOrEmpty(Configuration.CrawlerUserAgentPattern) ? Constants.CrawlerUserAgentPattern : Configuration.CrawlerUserAgentPattern; if (string.IsNullOrEmpty(crawlerUserAgentPattern) || !Regex.IsMatch(userAgent, crawlerUserAgentPattern, RegexOptions.IgnorePatternWhitespace | RegexOptions.IgnoreCase)) { return(false); } // check if the extenion matchs default extension if (Regex.IsMatch(relativeUrl, DefaultIgnoredExtensions, RegexOptions.IgnorePatternWhitespace)) { return(false); } if (!string.IsNullOrEmpty(Configuration.AdditionalExtensionPattern) && Regex.IsMatch(relativeUrl, Configuration.AdditionalExtensionPattern, RegexOptions.IgnorePatternWhitespace)) { return(false); } if (!string.IsNullOrEmpty(Configuration.BlackListPattern) && Regex.IsMatch(rawUrl, Configuration.BlackListPattern, RegexOptions.IgnorePatternWhitespace)) { return(false); } if (!string.IsNullOrEmpty(Configuration.WhiteListPattern) && Regex.IsMatch(rawUrl, Configuration.WhiteListPattern, RegexOptions.IgnorePatternWhitespace)) { return(true); } return(false); }
protected override void PostMarshallRequestFeature( IHttpRequestFeature aspNetCoreRequestFeature, APIGatewayProxyRequest lambdaRequest, ILambdaContext lambdaContext) { base.PostMarshallRequestFeature(aspNetCoreRequestFeature, lambdaRequest, lambdaContext); AppLogger.LogJson(new { Event = "Request", RequestId = lambdaContext.AwsRequestId, RequestPath = lambdaRequest.Path, RequestParameters = lambdaRequest.PathParameters, Method = lambdaRequest.HttpMethod, }); }
public RequestFrame(IHttpApplication <TContext> application, ILogger <RequestFrame <TContext> > logger, IHttpRequestFeature requestContext) : base(requestContext) { if (application == null) { throw new ArgumentNullException(nameof(application)); } if (logger == null) { throw new ArgumentNullException(nameof(logger)); } _application = application; _logger = logger; }
public HalHttpRequest(HttpContext context) { this.HttpContext = context ?? throw new ArgumentNullException(nameof(context)); this.queryFeature = context.Features.Get <IQueryFeature>() ?? throw new ArgumentException( "context should contain a IQueryFeature", nameof(context)); this.requestFeature = context.Features.Get <IHttpRequestFeature>() ?? throw new ArgumentException( "context should contain a IHttpRequestFeature", nameof(context)); this.requestCookiesFeature = context.Features.Get <IRequestCookiesFeature>(); }
public void GetParameterAliasOrSelf_ReturnsExpectedAliasValue() { // Arrange HttpContext context = new DefaultHttpContext(); HttpRequest request = context.Request; IHttpRequestFeature requestFeature = request.HttpContext.Features.Get <IHttpRequestFeature>(); requestFeature.QueryString = "?@p=[1, 2, null, 7, 8]"; ODataTemplateTranslateContext translateContext = new ODataTemplateTranslateContext(context); // Act string alias = translateContext.GetParameterAliasOrSelf("@p"); // Assert Assert.Equal("[1, 2, null, 7, 8]", alias); }
private static void UpdateScheme(HttpContext httpContext, IHttpRequestFeature requestFeature) { if (httpContext.Request.Headers.TryGetValue("X-Forwarded-Proto", out var header) && header.Count == 1) { switch (header[0]) { case "http": requestFeature.Scheme = "http"; break; case "https": requestFeature.Scheme = "https"; break; } } }
public void GetParameterAliasOrSelf_ReturnsExpectedAliasValue_ForMultiple() { // Arrange HttpContext context = new DefaultHttpContext(); HttpRequest request = context.Request; IHttpRequestFeature requestFeature = request.HttpContext.Features.Get <IHttpRequestFeature>(); requestFeature.QueryString = "?@p=@age&@age=@para1&@para1='ab''c'"; ODataTemplateTranslateContext translateContext = new ODataTemplateTranslateContext(context); // Act string alias = translateContext.GetParameterAliasOrSelf("@p"); // Assert Assert.Equal("'ab''c'", alias); }
public void GetParameterAliasOrSelf_Throws_ForInfiniteLoopParameterAlias() { // Arrange HttpContext context = new DefaultHttpContext(); HttpRequest request = context.Request; IHttpRequestFeature requestFeature = request.HttpContext.Features.Get <IHttpRequestFeature>(); requestFeature.QueryString = "?@p=@age&@age=@p1&@p1=@p"; ODataTemplateTranslateContext translateContext = new ODataTemplateTranslateContext(context); // Act Action test = () => translateContext.GetParameterAliasOrSelf("@p"); // Assert ExceptionAssert.Throws <ODataException>(test, "The parameter alias '@p' is in an infinite loop."); }
public void GetParameterAliasOrSelf_Throws_ForMissingParameterAlias() { // Arrange HttpContext context = new DefaultHttpContext(); HttpRequest request = context.Request; IHttpRequestFeature requestFeature = request.HttpContext.Features.Get <IHttpRequestFeature>(); requestFeature.QueryString = "?@p=@age&@para1='abc'"; ODataTemplateTranslateContext translateContext = new ODataTemplateTranslateContext(context); // Act Action test = () => translateContext.GetParameterAliasOrSelf("@p"); // Assert ExceptionAssert.Throws <ODataException>(test, "Missing the parameter alias '@age' in the request query string."); }
public HalHttpRequestFeature(IHttpRequestFeature requestFeature) { if (requestFeature == null) { throw new ArgumentNullException(nameof(requestFeature)); } this.Protocol = requestFeature.Protocol; this.Scheme = requestFeature.Scheme; this.Method = requestFeature.Method; this.PathBase = requestFeature.PathBase; this.Path = requestFeature.Path; this.QueryString = requestFeature.QueryString; this.RawTarget = requestFeature.RawTarget; this.Headers = requestFeature.Headers; this.Body = requestFeature.Body; }
public IActionResult Error() //500 numaralı status kodlarda yani C# kodlarının ürettiği exceptionlar için { IExceptionHandlerPathFeature exceptionHandlerPath = HttpContext.Features.Get <IExceptionHandlerPathFeature>(); IHttpRequestFeature httpRequestFeature = HttpContext.Features.Get <IHttpRequestFeature>(); var jsonSerializerSettings = new JsonSerializerSettings(); //Json serileştirme ayarlarımız jsonSerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; jsonSerializerSettings.Formatting = Formatting.Indented; var errorDto = new ErrorDto { CreateDate = DateTime.Now, QueryString = exceptionHandlerPath.Path.QueryStringFromUrl(), IsAjaxRequest = HttpContext.Request.IsAjaxRequest(), RequestType = Enum.Parse <RequestType>(httpRequestFeature.Method), StatusCode = 500, Url = exceptionHandlerPath.Path, Username = "******", Exception = JsonConvert.SerializeObject(exceptionHandlerPath.Error, jsonSerializerSettings) }; //Hatayı veritabanına kaydet ErrorLogger.LogException(errorDto); HttpContext.Response.StatusCode = 200; //Eğer istek ajax isteği ise if (errorDto.IsAjaxRequest) { return(Json(new JsonResponse { Status = JsonResponseStatus.Error, Message = "İşlem esnasında bir hata oluştu.", Result = errorDto })); } var errorVM = Mapper.Map <ErrorDto, ErrorVM>(errorDto); errorVM.Message = exceptionHandlerPath.Error.Message; return(View("_Error", errorVM)); }
public HalHttpContext( HttpContext context, IHttpRequestFeature requestFeature) { this.context = context ?? throw new ArgumentNullException(nameof(context)); var halRequestFeature = new HalHttpRequestFeature(requestFeature); var halResponseFeature = new HalHttpResponseFeature(); this.Features = new HalFeatureCollection( context.Features, halRequestFeature, halResponseFeature); this.Request = new HalHttpRequest(this); this.Response = new HalHttpResponse(this); }
protected virtual IHttpRequestFeature CreateRequest(IHttpRequestFeature originalRequest, IUntypedCall call, Encoding requestEncoding) { var headers = new Dictionary <string, StringValues>(originalRequest.Headers, StringComparer.Ordinal); var result = new HttpRequestFeature { Protocol = originalRequest.Protocol, Method = originalRequest.Method, Scheme = originalRequest.Scheme, Path = originalRequest.Path, PathBase = originalRequest.PathBase, QueryString = originalRequest.QueryString, RawTarget = originalRequest.RawTarget, Headers = new HeaderDictionary(headers), Body = new MemoryStream(requestEncoding.GetBytes(call.RawJson)) }; log.LogTrace($"Copied request: [{result.Protocol}] [{result.Method}] [{result.Scheme}] [{result.Path}] [{result.PathBase}] [{result.QueryString}] [{result.RawTarget}], [{headers.Count}] headers"); return(result); }
public void GetParameterAliasOrSelf_ReturnsNull_IfAliasNull() { // Arrange HttpContext context = new DefaultHttpContext(); HttpRequest request = context.Request; IHttpRequestFeature requestFeature = request.HttpContext.Features.Get <IHttpRequestFeature>(); requestFeature.QueryString = "?@p=[1, 2, null, 7, 8]"; ODataTemplateTranslateContext translateContext = new ODataTemplateTranslateContext { HttpContext = context }; // Act string alias = translateContext.GetParameterAliasOrSelf(null); // Assert Assert.Null(alias); }
public async Task <IActionResult> Index([FromServices] ISpaPrerenderer prerenderer, [FromServices] IMemoryCache cache) { IHttpRequestFeature requestFeature = this.Request.HttpContext.Features.Get <IHttpRequestFeature>(); string unencodedPathAndQuery = requestFeature.RawTarget; RenderToStringResult prerenderResult = await cache.GetOrCreateAsync(unencodedPathAndQuery, entry => { entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromDays(10); entry.SlidingExpiration = TimeSpan.FromDays(3); return(prerenderer.RenderToString("angular/dist-server/server", customDataParameter: new { request = this.Request.AbstractHttpContextRequestInfo() })); }); this.ViewData["SpaHtml"] = prerenderResult.Html; this.ViewData["Title"] = prerenderResult.Globals["title"]; this.ViewData["Scripts"] = prerenderResult.Globals["scripts"]; this.ViewData["Styles"] = prerenderResult.Globals["styles"]; this.ViewData["Meta"] = prerenderResult.Globals["meta"]; this.ViewData["Links"] = prerenderResult.Globals["links"]; this.ViewData["TransferData"] = prerenderResult.Globals["transferData"]; return(View()); }