C# 防止基类重写特定的操作方法
我有一个控制器类继承了一个基类,该基类处理/重写一个虚拟方法(比如JsonResult),在这个控制器中,我需要防止一个特定的JsonResult方法(并且只有这个方法)被这个基类重写。我最不想做的就是为其余的控制器方法创建一个动作过滤器属性。你会怎么做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
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");
请向我们展示一些代码,并解释您所说的
防止某个特定方法被该基类重写是什么意思
“被基类重写”?派生类可以重写基类的方法,而不是相反。。。请澄清(并显示一些代码)。那么,否决票真的有必要吗?但无论如何,问题已更新。我没有基类文件的写入权限,所以我想知道是否有任何类型的属性/操作筛选器允许您执行此操作?好的,我了解您的问题,请阅读我刚才添加的其他答复