gpt4 book ai didi

asp.net-mvc - MVC.ApiExplorer未发现的有效路由

转载 作者:行者123 更新时间:2023-12-04 03:52:53 24 4
gpt4 key购买 nike

当使用 ASP.NET Web API帮助页和相关的 MVC.ApiExplorer 时,我具有可通过http访问但ApiExplorer找不到的有效路由。仅当使用通用路由规则时才找到这些路由。使用更具体的规则(与通用规则结合使用)似乎隐藏了ApiExplorer的路由。

在三个规则的示例情况下,两个路由与 Controller 方法上的GET和POST操作相关,这些路由不带查询参数进入MIA。

public class SomeControllerController : ApiController
{
[HttpPost] public HttpResponseMessage Post(PostObject value) { ... }
[HttpGet] public IEnumerable<DisplayObject> GetAll() { ... }
[HttpGet] public DisplayObject GetById(string id) { ... }
}

使用以下路由规则时
routes.MapHttpRoute(
name: "ApiDefault",
routeTemplate: "api/{controller}/{id}",
defaults: new
{
id = RouteParameter.Optional
}
);

路由被Api Explorer适本地发现为
  • POST:api/SomeController
  • GET:api/SomeController
  • GET:api/SomeController/{id}

  • 但是,当添加不太通用且更有意义的规则时
    routes.MapHttpRoute(
    name: "ApiSomeControllerDefault",
    routeTemplate: "api/somecontroller/{id}",
    defaults: new
    {
    controller = "SomeController",
    id = RouteParameter.Optional
    }
    );

    routes.MapHttpRoute(
    name: "ApiDefault",
    routeTemplate: "api/{controller}/{id}",
    defaults: new
    {
    id = RouteParameter.Optional
    }
    );

    Api Explorer仅返回
  • GET:api/somecontroller/{id}

  • 是什么原因导致找不到我的某些路线?

    编辑
    Link to Issue Report on ApiExplorer project page

    最佳答案

    我相信您所看到的是ApiExplorer的一个已知错误。发生的是,ApiExplorer遍历了路由集合中的每条路由,并检查 Controller 及其 Action 是否可以解决。

    例如,在这种情况下,可以通过上述两条路径来探索操作“GetById”,ApiExplorer错误地认为这是由于含糊不清的匹配导致冲突,并且它试图过滤出重复的操作,在这种情况下,这会导致所有要过滤/删除的操作。由于此错误位于ApiExplorer(它是主要WebAPI核心的一部分)中,因此恐怕我们无法在短期内对其进行修复。

    关于asp.net-mvc - MVC.ApiExplorer未发现的有效路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14512934/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com