代码之家  ›  专栏  ›  技术社区  ›  HansMusterWhatElse

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

  •  0
  • HansMusterWhatElse  · 技术社区  · 6 年前

    工作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 ...
    }
    

    (仅在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 ...
    }
    

    enter image description here

    故障排除

    • Requested URL 80

    • 这个 Physical Path wwwroot 目录。这是否意味着路线无法正确解决?

      提前谢谢!

    1 回复  |  直到 5 年前
        1
  •  -1
  •   Joey Cai    6 年前

    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 }
    );
    

    此外,请尝试删除控制器中的以下代码,以测试它是否与依赖注入模块相关。

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

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

    config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;