代码之家  ›  专栏  ›  技术社区  ›  Espen

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

  •  3
  • Espen  · 技术社区  · 7 年前

    我有一些要约束到路径的控制器 /api/ 像这样:

    server.com/api/Load/Test
    

    为此,我设置了此路由:

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

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

    如何设置此项?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Marco    7 年前

    一个简单的解决方案是为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");
        }
    }