【发布时间】:2014-08-14 15:25:40
【问题描述】:
我在尝试对我正在处理的 API 之一进行版本控制时遇到了这个问题。
我有 2 个名称相同的控制器,它们位于不同的命名空间中并映射到不同的路由。当我尝试去他们的不同路线时,我收到错误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),一切都会按预期工作。
无论如何要保持相同的类名并按预期解决问题?
编辑:更新以显示初始化代码。
【问题讨论】:
-
在这种情况下是否注册了任何路由?还是两者都得到
No HTTP resource was found that matches the request URI? -
问题:是否启用了属性路由?
-
是的,属性路由已启用。如果我只是更改类的名称,一切正常。
-
@James 默认路由已就位并且运行良好。我已将它们全部删除以更具体地适合此示例。即使只是简单地更改类名也可以使路由正常工作。
-
看到这个answer
标签: c# asp.net asp.net-web-api attributerouting