現在我想的圖案有「當前用戶」在我的行動modelbinded參數。currentUser作爲modelbinded參數
我的行爲會是這個樣子:
public JsonResult ListStuff(User currentUser, string paramter1, int parameter2)
{
}
而且我有一個非常簡單的模型綁定器,看起來像這樣:
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
if (bindingContext.ModelName == "currentUser")
return Globals.HttpContextItems.User;
return null;
}
我真的很喜歡該操作是不太依賴於另一個控制器屬性。它更清楚地說明了這些函數的「輸入參數」是什麼,它更具可重用性,並且將來會使它更易於測試。
我有點affraid的安全問題雖然。我可能必須非常確定(即在DefaultModelBinder中)currentUser將永遠不會被其他ModelBinder自動綁定。
誰能照亮一盞燈,如果這可能是一個很好的模式,如果有東西,我目前還不想着,但是,這將使在未來的問題。
我會說它是模型綁定的反模式。 Modelbinding不依賴於參數的名稱。它依賴於類型。屬性的答案可能更接近,我會允許該屬性在它的ctor中接受一個字符串,所以它並不總是「currentUser」 –
有趣的是這個。但是你怎麼看待這個'約定配置'方式呢?是不是這樣的,你必須命名你的Controller SomeNameController。或者你的意見是在一個名爲Views的文件夾中並自動找到的? –
約定優於配置沒有問題。問題是在這種情況下,約定與類型匹配。通過參數名稱進行匹配違反了現有的約定。 –