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

本文关键字:方法 存储 信息 何存储 调用 customvalidationattribute | 更新日期: 2023-09-27 18:19:19

我有以下内容:

/// <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中存在的2-3个缓存系统之一(MemoryCache等),但我希望找到一些更特定于请求的

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

我可以将此信息存储在某个地方,告诉web API它可以使用该数据作为方法的参数之一,或者在某个地方,只有在请求的长度活动的动作可以调用?

我对允许或启用方法注入的选项有一个偏好。

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

它是一个IDictionary<string,object>,所以可以保存任何对象,Web API本身也存储了大量的信息(如错误级别细节,对HttpContext的引用,标记请求是否为本地等)。

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

public static class HttpRequestMessageExtensions
{
    public static void Add(this HttpRequestMessage request, string key, object o)
    {
        request.Properties.Add(key, o);
    }
    public static T Get<T>(this HttpRequestMessage request, string key)
    {
        object result;
        if (request.Properties.TryGetValue(key, out result))
        {
            if (result is T)
            {
                return (T) result;
            }
            try
            {
                return (T)Convert.ChangeType(result, typeof (T));
            }
            catch (InvalidCastException) {}
        }
        return default(T);
    }
}

MSDN上的参考。

代码引用

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