讓我們假設我們有一些動作控制器,它可能看起來像:ASP.NET MVC:我們應該/不應該將哪些控制器操作邏輯移動到屬性?
[HttpPost, Authorize]
public ActionResult Update(Guid itemId)
{
var item = repository.GetById(itemId);
if (item == null)
return NotFoundResult();
//Do something with item
return View();
}
我們已經申請了授權屬性,以確保只有某些特定的用戶可以執行我們的行動。
我們還可以將以下塊
var item = repository.GetById(itemId);
if (item == null)
return NotFoundResult();
到另一個屬性,並把它應用到我們的行動。
還有另外一種行爲,我們可以提取一些特定的邏輯屬性,並將它們反覆應用到我們的行爲中。
我的問題是:我們什麼時候該做,什麼時候不應該? 將這樣的邏輯移動到操作方法屬性實際上是一件好事嗎?
我在回顧某個項目的單元測試時遇到了這個問題。我實際上是在尋找代碼文檔,如果沒有找到項目,我就不會看到控制器操作應該做什麼。我在屬性單元測試中發現了這個部分,但是這實際上是屬性的責任嗎?
我可以理解Authorize屬性,它實際上是另一個層,但是我上面描述的邏輯又如何呢?控制者的行動責任是使用它還是......?
預先感謝任何意見:)
在這種情況下,OnActionExecuting將應用於所有控制器操作,但我們的控制器通常是類似CRUD的。在'C'的情況下,我們會遇到一些麻煩:) – Andrey
在這種情況下,您可以檢查[ActionDescriptor](http://msdn.microsoft.com/zh-cn/library/system.web。 mvc.actionexecutingcontext.actiondescriptor.aspx)來檢查正在調用哪個動作。看我的編輯。 –
謝謝!此外,如果我從我的單元測試中調用controller.Update(..),會調用此方法嗎?或者我應該使用ActionInvoker?或者也許別的.. :) – Andrey