【问题标题】:Web API Route not recognizedWeb API 路由无法识别
【发布时间】:2013-12-12 02:59:21
【问题描述】:

我有:

[RoutePrefix("teamone/players")]

..........................
[HttpPost("{key:regex([A-Za-z0-9]{32})}/AccessToken", RouteName = "MakeToken")]
        public HttpResponseMessage MakeToken(string key)
        {
            key = key + "5555";
            return new HttpResponseMessage(HttpStatusCode.OK);
        }

当我尝试在 Postman REST 客户端中访问此 URL 时:

http://localhost:4566/teamone/players/243445/AccessToken

我得到一个 404。

我有

configuration.MapHttpAttributeRoutes();

我还缺少什么?同一控制器中的所有其他路由都正常工作。

【问题讨论】:

  • 你在使用 MVC5 的属性路由功能吗?

标签: c# asp.net-web-api routes http-status-code-404


【解决方案1】:

您的正则表达式似乎导致输入不匹配。看起来您仍在使用 RC 版本的 Web API。我们现在已经公开了 RTM 版本的 Web API,您应该计划升级到它。属性路由经历了从 RC 到 RTM 的重大变化。

以下代码应该可以帮助您确定您的正则表达式是否确实与输入匹配。如果匹配但 web api 不匹配,那么问题出在 webapi 上,否则我认为你应该更改正则表达式。

Regex regex = new Regex("[A-Za-z0-9]{32}", RegexOptions.CultureInvariant | RegexOptions.IgnoreCase | RegexOptions.Compiled);
bool isMatch = regex.IsMatch("243445");

【讨论】:

    【解决方案2】:

    您的正则表达式的 {32} 部分表示正好 32 个字符,但在您的请求中,Uri 的一部分只有 六个字符 >.

    也许您的意思是 {6,32}(意思是 6 到 32 个字符)?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-06
      • 2018-10-04
      • 2012-07-15
      • 2018-05-13
      • 2016-02-13
      • 1970-01-01
      • 2019-11-16
      • 2015-02-09
      相关资源
      最近更新 更多