在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上的参考。
代码引用