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

Asp.net mvc 是否可以将路径约束到特定的控制器命名空间?,asp.net-mvc,routes,Asp.net Mvc,Routes,我有一些控制器要约束到路径/api/,如下所示: server.com/api/Load/Test 为此,我设置了以下路由: routes.MapRoute( name: "ApiDefault", url: "api/{controller}/{action}/", namespaces: new string[] { "Framework.ApiControllers" } ); 当然,上面的url是有效的,但是没有/api/的server.com/Load/Te

我有一些控制器要约束到路径
/api/
,如下所示:

server.com/api/Load/Test
为此,我设置了以下路由:

routes.MapRoute(
    name: "ApiDefault",
    url: "api/{controller}/{action}/",
    namespaces: new string[] { "Framework.ApiControllers" }
);
当然,上面的url是有效的,但是没有
/api/
server.com/Load/Test也有效,我真的希望api控制器只响应
/api/
路径


如何设置此选项?

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

您是否想过直接在控制器上使用属性路由,而不是定义全局路由?非常感谢!在修改了属性路由之后,我很确定您的代码有一个错误,它应该是
[Route(“api/Load/{action}”)]
:-)实际上不是。它在本地工作,没有action属性,即使您想添加它,也应该是带括号的
[action]
,不是花括号。那一定是版本之间的差异,因为它不适用于我的4.6.1版本。此外,我不仅需要指定操作,还必须使用大括号,因为我使用.net core 2Seems是一个有效的理由。我读过core,但现在不想改,也许在下一个项目中。。。