强制将两个ActionFilter属性相互结合使用

时间:2014-11-19 12:33:57

标签: c# asp.net-mvc controller action-filter

我有三个授权属性,其中包含用于检查所请求内容是否确实存在的代码。我决定通过创建一个名为QuizExistsAttribute的新属性来避免重复自己。

我希望在我的其他授权属性之前运行它。

现在我有了这个额外的属性,我希望确保我使用的原始属性在没有这个新属性的情况下不会被使用 - 因为我希望在其他任何事情之前进行检查。

依赖于QuizExistsAttribute逻辑的其他授权属性是:

  • ActiveQuizTakerSessionAtrribute
  • AuthorizeQuizAdminAttribute

所以在我的代码中我会像这样使用它们:

/// <summary>
/// Start of a quiz
/// </summary>
/// <param name="urlId"></param>
/// <returns></returns>
[QuizExists] // Check that quiz exists
[ActiveQuizTakerSession] // Check that they have an active session for this quiz
[HttpGet]
public ActionResult QuizQuestion(string urlId)
{
    // Code here after checks
}

有没有办法强制ActiveQuizTakerSession使用QuizExists属性(及以下)禁止使用?

1 个答案:

答案 0 :(得分:1)

您可以设置每个属性的执行顺序:

[QuizExists(Order = 1)] // Check that quiz exists
[ActiveQuizTakerSession(Order = 2)] // Check that they have an active session for this quiz
[HttpGet]

以下是一个很好的参考资料,可以帮助您:

Order property of ActionFilter, from lowest to greatest or vice versa?