C# 不允许进行筛选
我已经实现了一个动作方法来缩小HTML,它给出了一个异常“过滤是不允许的”我搜索了互联网,但找不到任何合适的解决方案。请指导我如何解决这个问题。我正在共享我的代码: MinifyAttribute类:C# 不允许进行筛选,c#,asp.net,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,我已经实现了一个动作方法来缩小HTML,它给出了一个异常“过滤是不允许的”我搜索了互联网,但找不到任何合适的解决方案。请指导我如何解决这个问题。我正在共享我的代码: MinifyAttribute类: public class MinifyAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) {
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 code block
}
}
公共类MinifyAttribute:ActionFilterAttribute
{
公共覆盖无效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*\当在VS2013中创建的全新ASP.NET MVC 5应用程序中使用您的代码时,您的代码似乎对我有效(正则表达式可能需要调整,但这只是一个小细节)。我已上载了完整的解决方案。您可以试用吗
为了清楚起见,我注意到您已将问题标记为asp.net-mvc-3和asp.net-mvc-4,但我没有机会在这些版本的asp.net mvc上进行测试。尝试在应用筛选器之前添加空检查:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var response = filterContext.HttpContext.Response;
if (response.Filter == null) return; // <-----
response.Filter = new YourFilter(response.Filter);
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var response=filterContext.HttpContext.response;
if(response.Filter==null)return;//我遇到了同样的问题,你的自定义过滤器和我的都遇到了,我对符文的答案(接受的答案)不满意。当我偶然发现这个问题时,我能够确定这个问题
公共类MinfyAttribute:ActionFilterAttribute
{
公共覆盖无效OnActionExecuting(ActionExecutingContext filterContext)
{
var request=filterContext.HttpContext.request;
var response=filterContext.HttpContext.response;
如果(!filterContext.IsChildAction)//
{
s=Regex.Replace(s,@“\s+”,“”);
s=Regex.Replace(s,@“\s*\n\s*”,“\n”);
s=Regex.Replace(s,@“\s*\>\s*\这可能是无关的,但我在这里登陆搜索“不允许过滤”错误。这发生在我安装Visual Studio 2019后(我在VS 2017中调试项目时遇到错误)
事实证明,我必须将项目从.NET Framework 4.7.1升级到.NET Framework 4.8
在此之后,我不再收到错误。作为奖励,我们的项目也在Visual Studio 2019中工作,因此我们获得了升级Visual Studio的额外好处。我不确定,但您是否尝试覆盖OnResultExecuted
而不是OnActionExecuting
,您必须在创建所有内容后应用过滤器。是的,我试过了,但还是一样error@Inanikian我有一个父类在这个子类上面看到这个。它可以帮助你实现你的目标goal@Inanikian我以前尝试过这种方法,还有什么我可以做的吗?你的解决方案也有一些错误,但无论如何感谢你的帮助,至少你尝试过,但其他用户在这个问题上uestion甚至不知道MVC的基本知识,我正在搜索一些.NET库来缩小html。不客气。有什么特别的原因你不使用ASP.NET中已经内置的捆绑和缩小功能吗(在System.Web.Optimization中)?是的,但它只是用来缩小CSS和JAVA脚本,而不是html。我说得对吗?你说得对,对不起,我还没有喝咖啡:-)在Web服务器上打开gzip压缩怎么样?在这里检查最高评分(不是公认的)答案:。
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var response = filterContext.HttpContext.Response;
if (response.Filter == null) return; // <-----
response.Filter = new YourFilter(response.Filter);
}
public class MinfyAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var request = filterContext.HttpContext.Request;
var response = filterContext.HttpContext.Response;
if (!filterContext.IsChildAction) //<--you need to make sure context is not a child action
{
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 code block
}
}
}