【问题标题】:Missing few characters from regex string, when passing it through an external application to the WebAPI通过外部应用程序将正则表达式字符串传递给 WebAPI 时,缺少几个字符
【发布时间】:2016-05-30 05:55:01
【问题描述】:

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

  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!

任何帮助将不胜感激。

【问题讨论】:

  • 第一个 ^(?=.*[0-9])(?=.*[a-zA-Z])[0-9a-zA-Z]{7,}$ 就足够了
  • 至少取一个大写字母。但如果没有大写字母则接受
  • 在这种情况下使用:- ^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])[0-9a-zA-Z]{7,}$..至少一个大写,一个小写和一个数字
  • 虽然正则表达式确实不需要任何+ 量词,但有趣的是,如果+ 量词 是必要的,该怎么做。我认为您的代码中有一些 Uri 转义。否则,它可以作为stackoverflow.com/questions/1559751/…的欺骗关闭

标签: asp.net regex string asp.net-web-api console-application


【解决方案1】:

执行 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多