2012-06-24 66 views
0

嗨,ASP.NET MVC和後期驗證?

對於將所需提交我有兩個名稱相同的行動,但其中一人有此屬性的觀點:

[AcceptVerbs(HttpVerbs.Post)] 

在nonPost動作我平時做一些驗證,其中如果用戶不正確,用戶將重定向到另一個動作,例如驗證編輯中的當前對象是否可以更改。

這是真的,我需要在後行動確切相同的驗證,以確保該網頁是不是用某種自定義帖子黑客攻擊?

如果是這樣,你通常如何處理這個問題?我知道AuthorizeAttribute,但我需要做的驗證是特定於此操作的。

+0

你指的是什麼樣的驗證?你應該在接受它之前驗證任何輸入。 – JeffSahol

回答

2

這是真的,我需要做的完全一樣的驗證在後 行動,以確保塔網頁上沒有某種自定義的 後砍死?

修改服務器上某些狀態和需要授權的每個控制器操作必須執行此授權。

我知道AuthorizeAttribute,但我需要做的驗證是 特定於此操作。

然後爲這2個操作寫一個特定的Authorize屬性(顯然你對這兩個操作有相同的授權邏輯)。

但是你的描述有些奇怪。你說過,如果授權在GET操作中失敗,你重定向。但是當你重定向你顯然不能調用POST動作,因爲重定向意味着GET。

+0

好吧,這是首選的方式?不要在Controller中爲這兩個操作驗證私有方法? – Banshee

+0

我仍然不明白你的場景和你想要達到的目標。如果它是授權邏輯,那麼它應該進入一個自定義的授權屬性,而不是控制器操作或任何私有方法。如果您正在進行輸入驗證,例如StartDate必須低於EndDate,那麼您可以在視圖模型上使用驗證屬性,並使默認模型聯編程序執行此驗證。正如我在我的回答中所述,您的問題並不清楚:您提到重定向到POST行爲,這沒有任何意義。 –

+0

假設我們得到了一個複雜的對象,這個對象有幾個不同的狀態,並在不同的視圖中編輯。當設置狀態Paid時,不應該再編輯對象。現在,我在每個操作中對此進行了小小的檢查,如果檢查失敗,那麼用戶將被重定向到解釋問題(或者在這種情況下爲對象狀態)的狀態頁面。問題是我的支票只在nonPost動作中,並且需要在兩者上都有。 – Banshee