当通过外部应用程序将正则表达式字符串传递给 WebAPI 时,缺少正则表达式字符串中的几个字符

Missing few characters from regex string, when passing it through an external application to the WebAPI

我的 WebAPI 中有两个获取方法,它们是:

  1. CheckPassword(string Password, string regExp) //验证密码模式,获取密码和正则表达式。

  2. CheckEmailValid(string Email, string regExp) //验证电子邮件模式,获取电子邮件及其正则表达式。

当我尝试通过使用控制台应用程序传递两个字符串(密码、正则表达式)或(电子邮件、正则表达式)来调用 WebAPI 中的 Get 方法时,字符串中遗漏了一些字符。但与此同时,如果我的 WebAPI 和测试中有正则表达式,它工作正常。所以我错过了应用程序和 webAPI 之间的一些字符。

密码的原始正则表达式字符串

public const string passwordPattern = @"^(?=.*[0-9]+.*)(?=.*[a-zA-Z]+.*)[0-9a-zA-Z]{7,}$";

我在调试时在 WebAPI 方法中收到的字符串

{^(?=.*[0-9] .*)(?=.*[a-zA-Z] .*)[0-9a-zA-Z]{7,}$}

这里我漏掉了 + 符号,这就是密码验证一直失败的原因。

电子邮件的原始正则表达式字符串

public const string emailPattern = @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z";

我在调试时在 WebAPI 方法中收到的字符串

\A(?:[a-z0-9!

任何帮助将不胜感激。

执行URL编码实际上解决了我的问题

从 APP 发送到 API 时,URL 编码可确保所有浏览器都能正确传输 URL 字符串中的文本。问号 (?)、和号 (&)、斜杠 (/) 和空格等字符可能会被某些浏览器处理或损坏。因此,这些字符必须在标签或查询字符串中编码,浏览器可以在请求字符串中重新发送这些字符串。 此方法是在 运行 时间从 ASP.NET 应用程序访问 HttpUtility.UrlEncode 方法的便捷方式。在内部,此方法使用 HttpUtility.UrlEncode 对字符串进行编码。因此,使用 HttpUtility.UrlEncode.

对正则表达式字符串进行编码
string urlEncodedPwdPattern = HttpUtility.UrlEncode(passwordPattern)

将字符串传递给 API。

HttpResponseMessage response = await client.GetAsync("api/Credential/CheckPassword?password=" + password + "&regExp=" + urlEncodedPwdPattern).ConfigureAwait(true);