我想實現一個服務模式來爲我的幾個ASP.NET MVC控制器提供一些邏輯。根據邏輯的結果,我可能希望控制器重定向,或給404找不到,或其他各種響應。因此,我希望我的控制器能夠從服務方法中接收參數out ActionResult
,以便他們執行這些響應。爲什麼像RedirectToAction()和HttpNotFound()這樣的Controller方法受到內部保護?
問題是,我沒有看到任何方式讓服務生成ActionResult
s。由於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;
}
你可以使用代碼示例進一步解釋,你想實現什麼? – CR41G14 2013-02-27 10:26:16