2014-12-03 47 views
2

我使用breeze與EF和做BeforeSaveEntity和BeforeSaveEntities的ContextProvider服務器端驗證。這是工作,但我正在尋找一種方法來在更高層次上進行此驗證,最好是在請求遇到控制器之前。如何解析微風SaveBundle

我已經有一個自定義的http模塊,所有的請求都經過了。我正在自定義http模塊中進行一些日誌記錄和身份驗證。我的目標是在同一時間/地點添加一些授權驗證。

比方說,我有一個用戶正在更新他的個人資料記錄。我在我的身份驗證cookie /令牌中擁有他的身份。配置文件ID(數據庫PK)嵌入在請求主體中傳遞的JSON中。我不能假定用戶在發送之前沒有惡意地將此配置文件ID值更改爲客戶端上的另一個值。所以我想拔出這個ID並驗證它是這個用戶的ID。

我在http模塊中獲取請求輸入流作爲JSON字符串。在這個字符串中是所有微風的東西:實體數組,實體方面,當然,我正在尋找的ID。

有沒有任何幫助工具可以幫助我解析這個json字符串?要麼根據實體名稱和屬性名稱提取具體的值?甚至重建包中包含的物體?

感謝

+0

沒人?服務器端驗證非常重要,其他人如何處理它? BeforeSaveEntity和BeforeSaveEntities?這很有效,但是在你到達那裏之前還需要進行大量的處理。 – mwill 2014-12-05 21:25:55

回答

0

看了看微風SaveChanges code。它使用一個名爲SaveWorkState的公共類,該類使用兩個參數構建:一個ContextProvider和一個JArray。 JArray的內容是在保存更改期間發送給服務器的JSON中的「entities」屬性。

構建好SaveWorkState後,您可以通過EntityInfoGroups屬性訪問EntityInfo對象。

下面是相關代碼:

var serializerSettings = BreezeConfig.Instance.GetJsonSerializerSettings(); 
var jsonSerializer = JsonSerializer.Create(serializerSettings); 
var saveBundle = ... JObject constructed from the JSON posted to your controller ...; 
var dynSaveBundle = (dynamic)saveBundle; 
var entitiesArray = (JArray)dynSaveBundle.entities; 
var contextProvider = ... EFContextProvider<> ...; 
var saveWorkState = new SaveWorkState(contextProvider, entitiesArray); 
var entityInfoGroups = saveWorkState.EntityInfoGroups; // <- this is what you want.