Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不允许进行筛选_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 3_Asp.net Mvc 4 - Fatal编程技术网

C# 不允许进行筛选

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) {

我已经实现了一个动作方法来缩小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 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
        }
    }
}