Azure - 具有正则表达式的Web API和路由模板

问题描述 投票:0回答:1

我有一个运行小型Web API的.NET Core应用程序。

以下路线没有任何麻烦。

工作HTTP路由

[HttpGet("api/voting/{id:int}")]
[Produces("application/json")]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(Voting))]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public async Task<IActionResult> GetByIdAsync([FromRoute] int id)
{
    // Left out for the sake of brevity ...
}

非工作HTTP路由(仅限Azure)

[HttpGet("api/voting/{slug:regex(\\w+)}/full")]
[MapToApiVersion("1.0")]
[Produces("application/json")]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(Voting))]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public async Task<IActionResult> GetBySlugAsync([FromRoute] string slug)
{
      // Left out for the sake of brevity ...
}

Azure中的错误消息

enter image description here

故障排除

  • 如果我在本地环境中运行它,一切都运行得很好,只有在Azure中运行它才会出现问题。
  • Requested URL内附加了80端口,我不太明白,因为我只通过https与服务进行通信。可能是正则表达式干扰了端口后缀吗?
  • 由于某种原因,Physical Path将路线附加到wwwroot目录。这是否意味着路线无法正确解决? 提前致谢!
azure iis .net-core asp.net-mvc-routing asp.net-core-webapi
1个回答
-1
投票

404错误可能是由路由问题引起的。由于您正在为Web API使用route属性。请确保GlobalConfiguration.Configure(WebApiConfig.Register);高于其他代码。

protected void Application_Start()
{
    GlobalConfiguration.Configure(WebApiConfig.Register);
    AreaRegistration.RegisterAllAreas();
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

并且config.MapHttpAttributeRoutes();代码高于其他路由配置。

config.MapHttpAttributeRoutes();

config.Routes.MapHttpRoute(
  name: "versionApi",
  routeTemplate: "api/{version}/{controller}/{id}",
  defaults: new { id = RouteParameter.Optional }
);

此外,尝试删除Controller中的以下代码,以测试它是否与从属注入模块相关。

[Dependency]
public IConfigurationServicev2 configurationService { get; set; }

[Dependency]
public IAccountService accountService { get; set; }

如果它也不适合你。在IncludeErrorDetailPolicy类中设置WebApiConfig属性后,您可以从Web服务器获取详细错误消息。

config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
© www.soinside.com 2019 - 2024. All rights reserved.