Regex 模型中的正则表达式时间限制

Regex 模型中的正则表达式时间限制,regex,asp.net-mvc,Regex,Asp.net Mvc,我有一个带有正则表达式的寄存器模型,但在C#中,我们有Regex.ValidateMatchTimeout来防止DDoS攻击。 问题是,如何在模型中实现具有时间限制的正则表达式 我的模型中的普通正则表达式: [DataType(DataType.EmailAddress)] [Required] [Display(Name = "Email")] [StringLength(80, ErrorMessage = "Email too large.")] [RegularExpression(@"

我有一个带有正则表达式的寄存器模型,但在C#中,我们有Regex.ValidateMatchTimeout来防止DDoS攻击。 问题是,如何在模型中实现具有时间限制的正则表达式

我的模型中的普通正则表达式:

[DataType(DataType.EmailAddress)]
[Required]
[Display(Name = "Email")]
[StringLength(80, ErrorMessage = "Email too large.")]
[RegularExpression(@"^([a-zA-Z0-9_.-]+)@(outlook|hotmail|yahoo)\.\w{2,}$", ErrorMessage = "Invalid email.")]
public string Email { get; set; }
不允许您以任何方式指定超时。另一方面,您可以设置全局默认超时。如果未配置任何内容,则超时将是无限的

AppDomain.CurrentDomain.SetData("REGEX_DEFAULT_MATCH_TIMEOUT", TimeSpan.FromSeconds(1));
更多信息:


另一种方法是根据您的示例正则表达式创建自己的属性。

您的示例正则表达式不容易使用,并且是锚定的,这意味着它很快。你对此有什么真正的用例吗?@lucastrezesniewski-uhm?你是说我的正则表达式做得很好,不是吗?是的,没错,这意味着这个特定的模式永远不会超时。:)我必须将AppDomain.Curre…放在哪个文件中?放在你的
Startup.cs
文件中,或者放在第一个正则表达式匹配之前运行的某个地方。然后我可以在一个方法中重新定义匹配超时,不是吗?示例:我在启动时放了5秒,但在我自己的方法中放了20秒之后。这将影响所有程序(所有客户端)或仅影响一个客户端??您可以通过在某些页面上输出
new Regex(“”)。MatchTimeout
。是
REGEX\u DEFAULT\u MATCH\u TIMEOUT
对于您的应用程序是全局的。