我已经实现了一个动作方法来缩小HTML,它提供了异常"不允许过滤"我已经搜索了互联网,但找不到任何合适的解决方案.请指导我这个问题将如何解决.我正在分享我的代码:
MinifyAttribute类:
public class MinifyAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var request = filterContext.HttpContext.Request;
var response = filterContext.HttpContext.Response;
response.Filter = new Minify(response.Filter, s =>
{
s = Regex.Replace(s, @"\s+", " ");
s = Regex.Replace(s, @"\s*\n\s*", "\n");
s = Regex.Replace(s, @"\s*\>\s*\<\s*", "><");
s = Regex.Replace(s, @"<!--(.*?)-->", ""); //Remove comments
var firstEndBracketPosition = s.IndexOf(">");
if (firstEndBracketPosition >= 0)
{
s = s.Remove(firstEndBracketPosition, 1);
s = s.Insert(firstEndBracketPosition, ">");
}
return s;
}); // i'm getting exception here on this …
Run Code Online (Sandbox Code Playgroud) 我正在使用Asp.Net Core作为Rest Api服务。我需要访问ActionFilter中的请求和响应。实际上,我在OnActionExcecuted中找到了请求,但无法读取响应结果。
我正在尝试返回值,如下所示:
[HttpGet]
[ProducesResponseType(typeof(ResponseType), (int)HttpStatusCode.OK)]
[Route("[action]")]
public async Task<IActionResult> Get(CancellationToken cancellationToken)
{
var model = await _responseServices.Get(cancellationToken);
return Ok(model);
}
Run Code Online (Sandbox Code Playgroud)
并在ActionFilter的OnExcecuted方法中如下所示:
_request = context.HttpContext.Request.ReadAsString().Result;
_response = context.HttpContext.Response.ReadAsString().Result; //?
Run Code Online (Sandbox Code Playgroud)
我试图在ReadAsString中将响应作为扩展方法如下:
public static async Task<string> ReadAsString(this HttpResponse response)
{
var initialBody = response.Body;
var buffer = new byte[Convert.ToInt32(response.ContentLength)];
await response.Body.ReadAsync(buffer, 0, buffer.Length);
var body = Encoding.UTF8.GetString(buffer);
response.Body = initialBody;
return body;
}
Run Code Online (Sandbox Code Playgroud)
但是,没有结果!
如何在OnActionExcecuted中获得响应?
谢谢大家花时间尝试帮助解释
基本上我们处在一个主要的hacky情况.我们有一些链接到其他网站的网页.但是,要求是此站点与链接到我们的站点具有相同的布局.这最初是通过请求原始页面,抓取布局以及在其布局中包装内容来完成的.
这在Web窗体中相当简单,因为我们可以简单地创建一个子类化的页面,它会覆盖Render方法,然后将我们在外部站点布局中生成的任何内容包装起来.但是,现在这个项目正在ASP.NET MVC中重写.
我们如何才能了解MVC操作创建的HTML结果,根据需要修改它们并将修改后的结果输出到浏览器?