Catch-all路由无法使用WebApi2 ApiController查找路由

 reisen_辉 发布于 2023-02-04 16:50

我正在创建一个WebApi2服务,我想要实现的一个方法表示来自内部树结构中的对象的HTTP GET - 所以请求将是:

GET /values/path/path/to/object/in/tree

所以我希望我的方法接收"path/to/object/in/tree".

但是,当我运行它时,我只得到404,而且有趣的是我得到的404与标准的IIS 404不同.它的标题是'/'应用程序中的'服务器错误',而完全无效的那个资源标题为'HTTP错误404.0 - 未找到'.

我正在玩默认模板试试看我是否可以使用它,因此相似性.

我有这个 RouteConfig

public static void RegisterRoutes(RouteCollection routes)
{
    var route = routes.MapRoute(
               name: "CatchAllRoute",
                url: "values/path/{*pathValue}",
                defaults: new { controller = "Values", action = "GetPath" });
}

这是我的ValuesController:

[System.Web.Mvc.AuthorizeAttribute]
[RoutePrefix("values")]
public class ValuesController : ApiController
{
    [Route("test/{value}")]
    [HttpGet]
    public string Test(string value)
    {
        return value;
    }

    [HttpGet]
    public string GetPath(string pathValue)
    {
        return pathValue;
    }
}

有趣的是,如果我派生Controller而不是ApiController它工作正常,但那么正常的属性路由不起作用.

我尝试按照这篇文章(http://www.tugberkugurlu.com/archive/asp-net-web-api-catch-all-route-parameter-binding)中的方法进行操作,但我无法使用它.

我敢肯定我错过了一些愚蠢的事情,但是花了几个小时才开始,我觉得谨慎地问我做错了什么.

谢谢

中号

1 个回答
  • Web api路由与路由MVC不同.代替

    route.MapRoute
    

    尝试

    public static void Register(HttpConfiguration config) {
        config.MapHttpAttributeRoutes
    
        config.Routes.MapHttpRoute(
            name: "CatchAll", routeTemplate: "values/path/{*pathvalue}", 
            defaults: new {id = RouteParameter.Optional });
    }
    

    它从控制器工作的原因是MapRoute是路由MVC控制器的正确格式,而MapHttpRoute是为API控制器设计的.

    2023-02-04 16:52 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有