当通过外部应用程序将正则表达式字符串传递给 WebAPI 时,缺少正则表达式字符串中的几个字符
Missing few characters from regex string, when passing it through an external application to the WebAPI
我的 WebAPI 中有两个获取方法,它们是:
CheckPassword(string Password, string regExp)
//验证密码模式,获取密码和正则表达式。
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 + "®Exp=" + urlEncodedPwdPattern).ConfigureAwait(true);
我的 WebAPI 中有两个获取方法,它们是:
CheckPassword(string Password, string regExp)
//验证密码模式,获取密码和正则表达式。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 + "®Exp=" + urlEncodedPwdPattern).ConfigureAwait(true);