ASP.基于重复类名的.NET WebAPI属性路由
本文关键字:NET WebAPI 属性 路由 于重复 ASP | 更新日期: 2023-09-27 18:18:13
我在尝试我正在工作的api的一个版本时遇到了这个问题。
我有两个命名相同的控制器,它们位于不同的命名空间中,并且映射到不同的路由。当我尝试去他们不同的路由时,我得到错误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" });
}
}
}
如果我改变类名,使它们不相同(如ValuesControllerV1
和ValuesControllerV2
),一切工作如预期。
是否有办法保持相同的类名并按预期的方式解决问题?
编辑:更新显示初始化代码以及
在MVC中,你可以使用带有命名空间参数的MapRoute Overload。像这样:
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中实现。
这里有一个关于这个问题的线程: