gpt4 book ai didi

c# - 用于 API 版本控制的 Web API 2 属性路由

转载 作者:行者123 更新时间:2023-11-30 15:14:27 25 4
gpt4 key购买 nike

我有一个使用基于约定的路由的 ASP.NET Web API 2 应用程序:

[app-url]/v1/[controller]

现在,我想给 API 添加另一个版本,发现属性路由是实现我想要的最简单的方法。因此,我在 Application_Start() 方法中注册了 Web API 路由,如下所示。

GlobalConfiguration.Configure(WebApiConfig.Register);

此外,我确保 WebApiConfig 类中的 Register() 方法仅包含以下行:

config.MapHttpAttributeRoutes();

有两个 Controller 来测试版本控制:

/v1/StatusController.cs

[RoutePrefix("v1/status")]
public class StatusController : ApiController
{
[Route("")]
public string Get()
{
return "V1 - OK";
}
}

/v2/StatusController.cs

[RoutePrefix("v2/status")]
public class StatusController : ApiController
{
[Route("")]
public string Get()
{
return "V2 - OK";
}
}

但是,当我导航到下面显示的任一路线时,我收到错误消息。

  1. [app-url]/v1/status
  2. [app-url]/v2/status

SERVER ERROR

404 - File or directory not found.

The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable.

最佳答案

您的方法将不起作用,因为 ASP.NET Web API 使用所谓的 Controller Selector 来为给定路由查找相应的 Controller 。然而,这个选择器不考虑 Controller 的命名空间,而是使用它的名称。

默认情况下,Web API 附带 DefaultHttpControllerSelector您可以找到有关其实现的信息 here .

您的问题的可能解决方案是实现自定义 IHttpControllerSelector 并告诉 Web API 使用它。为此,您可以在互联网上找到几个示例。

相反,您也可以将 Controller 名称更改为唯一的,例如:

  • StatusV1Controller
  • StatusV2Controller

关于c# - 用于 API 版本控制的 Web API 2 属性路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54668419/

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