【问题标题】:Azure - Web API and Route Template with a Regular ExpressionAzure - 带有正则表达式的 Web API 和路由模板
【发布时间】:2019-02-19 15:33:31
【问题描述】:

我有一个运行小型 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 中的错误消息

疑难解答

  • 如果我在本地环境中运行它,一切都运行良好,只有在 Azure 中运行时才会出现问题。

  • Requested URL 中附加了端口80,我不太明白,因为我只通过https 与服务通信。莫非是正则表达式干扰了端口后缀?

  • Physical Path 出于某种原因将路由附加到wwwroot 目录。这是否意味着无法正确解析路由?

    提前致谢!

【问题讨论】:

    标签: azure iis .net-core asp.net-mvc-routing asp.net-core-webapi


    【解决方案1】:

    404 错误可能是由路由问题引起的。由于您正在为 Web API 使用路由属性。请确保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; }
    

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

    config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
    

    【讨论】:

      猜你喜欢
      • 2012-04-30
      • 1970-01-01
      • 2020-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-28
      相关资源
      最近更新 更多