为什么像RedirectToAction()和HttpNotFound()这样的控制器方法是内部保护的?
本文关键字:方法 控制器 内部 保护 RedirectToAction HttpNotFound 为什么 | 更新日期: 2023-09-27 18:01:16
我想实现一个服务模式,为我的几个ASP提供一些逻辑。。NET MVC控制器。根据逻辑的结果,我可能希望控制器重定向,或给出未找到的404或各种其他响应。因此,我希望我的控制器能够从服务方法接收一个out ActionResult
参数,它们可以返回该参数以执行这些响应。
问题是我看不出该服务生成ActionResult
的任何方法。由于Controller
类中的RedirectToAction()
和HttpNotFound()
等方法被设置为protected internal
,因此无法从业务类中访问。
让它们成为protected internal
的理由是什么?我的服务应该如何向控制器指示它们应该返回的操作结果?
public ActionResult SetVariable(int variableId, int variableValue) {
ActionResult actionRes;
_svcVars.SetVariable(variableId, variableValue, out actionRes);
return actionRes;
}
…服务代码看起来像这样:
public bool SetVariable(int variableId, int variableValue, out ActionResult actionRes) {
ConfigRepository repoConfig = new ConfigRepository();
if (!repoConfig.VariableExists(variableId)) {
actionRes = HttpNotFound("Could not find config variable");
return false;
}
if (!repoConfig.VariableMayBeChanged(variableId)) {
actionRes = Redirect("/ChangeForbidden.html");
return false;
}
int variablesListId = repoConfig.SetVariable(variableId, variableValue);
actionRes = RedirectToAction("ViewVariablesList", new { listId = variablesListId });
return true;
}
与。net中的任何对象一样,您可以使用它的构造函数来创建实例。问题是我看不出有任何方法让服务生成ActionResults。
就像这样:
var values = new RouteValueDictionary(new
{
action = "ViewVariablesList",
listId = variablesListId
});
actionRes = new RedirectToRouteResult(values);
至于为什么Controller类上相应的方法是受保护的和内部的,这个问题你可以问设计框架的人。