Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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 Mvc_Model View Controller - Fatal编程技术网

C# 防止基类重写特定的操作方法

C# 防止基类重写特定的操作方法,c#,asp.net-mvc,model-view-controller,C#,Asp.net Mvc,Model View Controller,我有一个控制器类继承了一个基类,该基类处理/重写一个虚拟方法(比如JsonResult),在这个控制器中,我需要防止一个特定的JsonResult方法(并且只有这个方法)被这个基类重写。我最不想做的就是为其余的控制器方法创建一个动作过滤器属性。你会怎么做 public class ControllerBase : Controller { protected override JsonResult Json(...) { //do something here

我有一个控制器类继承了一个基类,该基类处理/重写一个虚拟方法(比如JsonResult),在这个控制器中,我需要防止一个特定的JsonResult方法(并且只有这个方法)被这个基类重写。我最不想做的就是为其余的控制器方法创建一个动作过滤器属性。你会怎么做

public class ControllerBase : Controller 
{
    protected override JsonResult Json(...) { 
        //do something here
    }
}

public class HomeController : ControllerBase 
{
    public JsonResult UpdateData(...) { 
        return base.Json(...); // I need to prevent this method from being overriden
    }

    public JsonResult UpdateResult(...) { 
        return this.Json(...); // this (and the other ones) can use the base method.
    }
}

您可以在基本控制器中定义一个标志,用于控制要调用的方法,如下所示:

public class ControllerBase : Controller 
{
    protected bool useOverriddenMethod = true;

    protected override JsonResult Json(...) {
        if (useOverriddenMethod )
        {
            //do something here
        }
        else
        {
            return base.Json(...);
        }
    }
}
然后在需要时相应地设置标志:

public class HomeController : ControllerBase 
{
    public JsonResult UpdateData(...) { 
        useOverriddenMethod = false;
        return this.Json(...); // I need to prevent this method from being overriden
    }

    public JsonResult UpdateResult(...) { 
        return this.Json(...); // this (and the other ones) can use the base method.
    }
}

由于无法编辑基本控制器,因此可以使用
controller.Content
方法传递JSON格式的对象

要在JSON中转换对象,可以使用
JavaScriptSerializer
类,如下所示:

using System.Web.Script.Serialization;

JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
string jsonString = jsSerializer.Serialize(objectToSerialize);
return Content(jsonString, "application/json");
然后,您可以通过
Content
方法返回结果,如下所示:

using System.Web.Script.Serialization;

JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
string jsonString = jsSerializer.Serialize(objectToSerialize);
return Content(jsonString, "application/json");

请向我们展示一些代码,并解释您所说的
防止某个特定方法被该基类重写是什么意思
“被基类重写”?派生类可以重写基类的方法,而不是相反。。。请澄清(并显示一些代码)。那么,否决票真的有必要吗?但无论如何,问题已更新。我没有基类文件的写入权限,所以我想知道是否有任何类型的属性/操作筛选器允许您执行此操作?好的,我了解您的问题,请阅读我刚才添加的其他答复