gpt4 book ai didi

c# - 重复类名上的 ASP.NET WebAPI 属性路由

转载 作者:太空宇宙 更新时间:2023-11-03 15:52:17 27 4
gpt4 key购买 nike

我在尝试对我正在使用的 API 之一进行版本控制时遇到了这个问题。

我有 2 个名称相同的 Controller ,它们位于不同的命名空间中并映射到不同的路由。当我尝试转到它们的不同路由时,出现错误 No HTTP resource was found that matches the request URI

这是一个代码示例:

namespace MvcApplication
{
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
}
}

namespace MvcApplication
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.EnsureInitialized();
}
}
}

namespace MvcApplication.Controllers.v1
{
[RoutePrefix("api/v1/values")]
public class ValuesController : ApiController
{
[HttpGet]
[Route("")]
public IHttpActionResult GetValues()
{
return Ok(new string[] { "value1", "value2" });
}
}
}

namespace MvcApplication.Controllers.v2
{
[RoutePrefix("api/v2/values")]
public class ValuesController : ApiController
{
[HttpGet]
[Route("")]
public IHttpActionResult GetValues()
{
return Ok(new string[] { "value3", "value4" });
}
}
}

如果我更改类名以使它们不相同(例如 ValuesControllerV1ValuesControllerV2),一切都会按预期工作。

有没有办法保留相同的类名并按预期解决问题?

编辑:已更新以显示初始化代码。

最佳答案

在 MVC 中,您可以使用具有命名空间参数的 MapRoute 重载。像这样:

routes.MapRoute(
"Route for v1", // Route name
"areav1/{controller}/{action}/{id}", // URL with parameters
new { controller = "Values", action = "GetValues", id = UrlParameter.Optional }, new string[] { "MvcApplication.Controllers.v1"}
);

routes.MapRoute(
"Route for v2", // Route name
"areav2/{controller}/{action}/{id}", // URL with parameters
new { controller = "Values", action = "GetValues", id = UrlParameter.Optional }, new string[] { "MvcApplication.Controllers.v2"}
);

不幸的是,这还没有在 WebApi 中实现。

Here is a thread about this problem specifically:

关于c# - 重复类名上的 ASP.NET WebAPI 属性路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25311842/

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