いくつかのASP.NETMVCコントローラーにロジックを提供するサービスパターンを実装したいと思います。ロジックの結果によっては、コントローラーをリダイレクトしたり、404が見つからない場合や、その他のさまざまな応答を返したりする場合があります。out ActionResult
したがって、コントローラーがこれらの応答を実行するために返すことができるサービスメソッドからパラメーターを受信できるようにする必要があります。
問題は、サービスがを生成する方法が見当たらないことActionResult
です。のようなメソッド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;
}