目前我正在尋找處理asp.net mvc中控制器操作內部條件的最佳實踐。例如 -尋找最佳實踐來處理asp.net中控制器操作中的條件邏輯mvc
public ActionResult Edit(int Id = 0)
{
var Item = _todoListItemsRepository.Find(Id);
**if (Item == null)
return View("NotFound");
if (!Item.IsAuthorized())
return View("NotValidOwner");**
return View("Edit", Item);
}
以粗體標記的上述兩個條件中的控制器內部其他動作被使用。所以,爲了不在所有的行爲中重複這些條件。我已經使用了下面的方法。
[HttpGet]
[Authorize]
[ModelStatusActionFilter]
public ActionResult Edit(int Id = 0)
{
var Item = _todoListItemsRepository.Find(Id);
return View("Edit", Item);
}
public class ModelStatusActionFilterAttribute : ActionFilterAttribute
{
private readonly ITodoListItemsRepository _todoListItemsRepository;
public ModelStatusActionFilterAttribute()
: this(new TodoListItemsRepository())
{
}
public ModelStatusActionFilterAttribute(ITodoListItemsRepository todoListItemsRepository)
{
_todoListItemsRepository = todoListItemsRepository;
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
try
{
var Id = Convert.ToInt32(filterContext.RouteData.Values["Id"]);
var Item = _todoListItemsRepository.Find(Id);
if (Item == null)
{
filterContext.Result = new ViewResult() { ViewName = "NotFound" };
}
else if (!Item.IsAuthorized())
{
filterContext.Result = new ViewResult() { ViewName = "NotValidOwner" };
}
}
catch
{
}
}
}
我不確定這是否是處理此類情況的最佳做法。那麼,有人可以請指教嗎?
問候, 拉姆
可有人請回答我的問題? –
如果您的代碼按預期工作並且不會導致錯誤,那麼這不完全是您的問題在網絡中的正確站點。你可以試試Code Review。 http://codereview.stackexchange.com/ – Claies