0
我在MVC4網站中使用了很多Json.NET,並試圖通過在JsonNetResult類中使用FUNC來簡化一些事情。我發現在編寫JsonNetResult控制器操作時,我將所有內容都包裝在同一個try/catch語句中,因此我在JsonNetResult類中創建了一個方法,將Func作爲輸入。但是,我發現該對象作爲輸入不起作用 - 我必須具體說明,並且我已經制定了一系列以不同類型作爲Func<>
中的參數的重載方法。將FUNC <>傳遞給我在MVC4中的jsonResponseObj類
在這種情況下有沒有辦法使用一個對象作爲輸入?有沒有更好的方式來做我想做的事情?我試圖堅持幹,但我無法弄清楚如何正確使用FUNC <>。我感謝任何幫助或指點。從控制器
代碼:從JsonNetResult
[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");
}
代碼: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;
}
}
謝謝@Kirill,今天我會試試這個! – user576838
另外,@Kirill Bestemyanov - 聲明_errorHandlingService屬性在哪裏?我也沒有把它看作ProcessException方法中的一個參數。這個應該實現IActionFilter嗎? – user576838
這是不需要的。你應該從聲明中刪除它。我更新答案。 –