在CustomValidationAttribute调用的方法中,如何存储方法的一些信息

时间:2014-08-25 17:15:32

标签: c# asp.net-web-api

我有以下内容:

/// <summary>
/// Max length per string is 200
/// </summary>
[CustomValidation(typeof(ProjectPixelValidator), "IsProjectPixelCollectionValid")]
public IEnumerable<string> ProjectPixels { get; set; }

要确定它是否有效,我必须调用数据库以获取特定于当前用户的验证信息。

实际方法的样本:

public const int MaxPixelLength = 200;
public static ValidationResult IsProjectPixelCollectionValid(IEnumerable<string> projectPixels, ValidationContext context)
{ /* ... omitted code ... */ 
    return ValidationResult.Success;
}

如果它有效,我将不得不回调相同的方法来获取验证所需的数据。我意识到我可以将它粘贴在asp.net(MemoryCache之类的)中存在的2-3个Cache系统之一中,但我希望找到更多特定于请求的内容

在MVC中,我记得,我可以将它添加到路径数据字典中。

我是否可以将此信息存储在告知Web API的某个位置,它可以将该数据用作该方法的参数之一,或者某个地方仅在该操作可以调用的请求长度内存活?

我更喜欢允许或启用方法注入的选项。

1 个答案:

答案 0 :(得分:0)

您可以在Properties的{​​{1}}词典中存储应在HTTP请求期间存储的任何内容。您可以访问所有Web API组件中的当前HttpRequestMessage - 消息处理程序,过滤器,控制器甚至格式化程序,以便该位置非常合适。

它是HttpRequestMessage所以可以保存任何对象,Web API本身也存储大量信息(例如错误级别详细信息,对HttpContext的引用,标记请求是否是本地等)。

您还可以使用一些扩展方法来帮助您处理添加和检索该字典中的内容:

IDictionary<string,object>

Reference on MSDN

Code reference