| File: UrlActions\CustomResponseAction.cs | Web Access |
| Project: src\aspnetcore\src\Middleware\Rewrite\src\Microsoft.AspNetCore.Rewrite.csproj (Microsoft.AspNetCore.Rewrite) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Text; using Microsoft.AspNetCore.Http.Extensions; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Rewrite.Logging; namespace Microsoft.AspNetCore.Rewrite.UrlActions; internal sealed class CustomResponseAction : UrlAction { public int StatusCode { get; } public string? StatusReason { get; set; } public string? StatusDescription { get; set; } public CustomResponseAction(int statusCode) { StatusCode = statusCode; } public override void ApplyAction(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReferences) { var response = context.HttpContext.Response; response.StatusCode = StatusCode; if (!string.IsNullOrEmpty(StatusReason)) { context.HttpContext.Features.GetRequiredFeature<IHttpResponseFeature>().ReasonPhrase = StatusReason; } if (!string.IsNullOrEmpty(StatusDescription)) { context.HttpContext.Features.Get<IHttpBodyControlFeature>()?.AllowSynchronousIO = true; var content = Encoding.UTF8.GetBytes(StatusDescription); response.ContentLength = content.Length; response.ContentType = "text/plain; charset=utf-8"; response.Body.Write(content, 0, content.Length); } context.Result = RuleResult.EndResponse; context.Logger.CustomResponse(context.HttpContext.Request.GetEncodedUrl()); } }