私は MVC4 サイトで多くの Json.NET を使用しており、JsonNetResult クラスで FUNC を使用して少し単純化しようとしました。JsonNetResult コントローラー アクションを作成しているときに、すべてを同じ try/catch ステートメントでラップしていたことがわかりました。そのため、入力として Func を受け取るメソッドを JsonNetResult クラスに作成しました。ただし、入力としてのオブジェクトが機能しないことがわかりました。具体的に説明する必要があり、Func<>
.
この場合、オブジェクトを入力として使用する方法はありますか? 私がやろうとしていることを行うためのより良い方法はありますか? DRY に準拠しようとしていますが、FUNC<> を活用してそれを正しく行う方法がわかりません。助けや指針をいただければ幸いです。
コントローラーからのコード:
[HttpPost]
[ValidateAntiForgeryToken]
public JsonNetResult jsonUpdateProfile(UserProfile u)
{
JsonNetResult j = new JsonNetResult();
var x = ModelState;
Func<UserProfile, jsonResponseObj> updater = p => updateUserProfile(p);
j.GetResponseObj(updater, u);
return j;
}
private jsonResponseObj updateUserProfile(UserProfile u)
{
UserProfile updateUser = db.UserProfiles.Find(u.UserId);
updateUser = u;
updateUser.UpdatedBy = u.UserName;
updateUser.UpdatedOn = DateTime.Now;
db.SaveChanges();
return new jsonResponseObj(null,"Profile Updated");
}
JsonNetResult からのコード: ActionResult
public void GetResponseObj(Func<object, jsonResponseObj> custom, object arg)
{
try
{
Data = custom.Invoke(arg);
}
catch (Exception ex)
{
// alert elmah
Data = new jsonResponseObj(ex);
}
}
このjsonResponseObj
クラスは、すべての応答を標準化するための JSON データの単なるラッパーです。
public class jsonResponseObj
{
public string status { get; set; }
public Object data { get; set; }
public string msg { get; set; }
public jsonResponseObj(Object data, string msg = "")
{
this.status = "OK";
this.data = data;
this.msg = msg;
}
public jsonResponseObj(Exception ex)
{
this.status = "ERROR";
this.msg = ex.Message;
}
}