2012-06-24 62 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