是否可以约束特定控制器命名空间的路径?

时间:2018-03-08 12:00:58

标签: asp.net-mvc routes

我有一些控制器要限制在路径/api/中,如下所示:

server.com/api/Load/Test

为此我设置了这个路由:

routes.MapRoute(
    name: "ApiDefault",
    url: "api/{controller}/{action}/",
    namespaces: new string[] { "Framework.ApiControllers" }
);

当然上面的网址也有效,但server.com/Load/Test没有/api/也是如此,我真的希望api控制器只响应/api/路径。

如何设置?

1 个答案:

答案 0 :(得分:1)

一个简单的解决方案是从基于约定的路由转移到api控制器的属性路由。这意味着从路由配置中删除api路由并直接将路由添加到控制器:

[Produces("application/json")]
[Route("api/Load")]
public class LoadController : Controller
{

}

如果你不想单独装饰每个api控制器,你可以创建一个BaseApiController,你的每个api控制器都可以继承:

[Route("api/[Controller]")]
public class BaseApiController : Controller
{
}

public class LoadController : BaseApiController
{
    public IActionResult Test()
    {
        return Ok("foo");
    }
}