我想实现一个服务模式来为我的几个 ASP.NET MVC 控制器提供一些逻辑。根据逻辑的结果,我可能希望控制器重定向,或给出 404 未找到,或各种其他响应。因此,我希望我的控制器能够out ActionResult
从服务方法接收参数,他们可以返回该参数以执行这些响应。
问题是我看不到服务生成ActionResult
s 的任何方式。由于类中的RedirectToAction()
和HttpNotFound()
之Controller
类的方法设置为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;
}