【发布时间】:2017-03-12 22:38:16
【问题描述】:
我对在 MVC 中设置路由和路由非常陌生。在我的上一份工作中,我们使用属性路由来处理我们的 WebAPI 内容,所以我对此非常熟悉(RoutePrefix、Route 和 HttpGet/HttpPost 属性等)。而且我可以让我当前的项目在属性上正常工作。
所以现在我要做的是用“api”为所有 webApi 路由“添加前缀”。所以我不想去 mysite/test/hello,而是去 mysite/api/test/hello。
这就是我所拥有的,只使用属性路由,它工作得很好:
[RoutePrefix("Test")]
public class TestController : ApiController
{ ....
[HttpPost]
[Route("{message}")]
public HttpResponse EchoBack(string message)
{
// return message ... in this case, "hello"
}
}
现在,我知道我可以将 RoutePrefix 更改为“api/Test”(100% 有效),但我不想更改所有控制器,我宁愿通过更改在 WebApiConfig 中传递给 config.Routes.MapHttpRoute 的值。
这可能吗?
【问题讨论】:
-
您所描述的是基于约定的路由,它与同一控制器上的属性路由不能很好地混合。控制器要么遵循基于约定的路由,要么遵循属性路由。不是都。您可以拥有不同的控制器,要么全部为属性,要么全部基于约定。属性路由允许通过 IMO 获得更大的灵活性。 docs.microsoft.com/en-us/aspnet/web-api/overview/…
-
谢谢@Nkosi。所以你的意思是,如果我想更改基于属性的控制器以使用“api”作为前缀,我应该在每个控制器的 RoutePrefix 属性中执行此操作,而忽略约定/映射? (今晚我会阅读那篇 MSDN 文章,感谢您找到它!)
-
没有。不是在每个控制器上。我找到了一篇更好的文章,应该正是您正在寻找的内容strathweb.com/2015/10/…
标签: c# asp.net-web-api2 asp.net-web-api-routing