Asp.net web api 如何向ASP.Net核心API路由添加变量前缀?

Asp.net web api 如何向ASP.Net核心API路由添加变量前缀?,asp.net-web-api,asp.net-core,routes,Asp.net Web Api,Asp.net Core,Routes,我有一个ASP.Net核心API web应用程序 控制器的定义如下: [Route("/api/[controller]")] [ApiController] public class ValuesController : ControllerBase { // GET api/values [HttpGet] public ActionResult<IEnumerable<string>> Get()

我有一个ASP.Net核心API web应用程序

控制器的定义如下:

[Route("/api/[controller]")]
[ApiController]
 public class ValuesController : ControllerBase
 {
        // GET api/values
        [HttpGet]
        public ActionResult<IEnumerable<string>> Get()
        {
            return new string[] { "value1", "value2" };
        }
}
[Route("/[customername]/api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
        // GET api/values
        [HttpGet]
        public ActionResult<IEnumerable<string>> Get()
        {
            // TODO: Somehow get the value of [customername]?

            return new string[] { "value1", "value2" };
        }
}
我希望能够使用表示客户的变量路径调用API。例如,我想这样做:

[Route("/api/[controller]")]
[ApiController]
 public class ValuesController : ControllerBase
 {
        // GET api/values
        [HttpGet]
        public ActionResult<IEnumerable<string>> Get()
        {
            return new string[] { "value1", "value2" };
        }
}
[Route("/[customername]/api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
        // GET api/values
        [HttpGet]
        public ActionResult<IEnumerable<string>> Get()
        {
            // TODO: Somehow get the value of [customername]?

            return new string[] { "value1", "value2" };
        }
}

这可能吗?

只需使用路由参数:

[Route("{customername}/api/[controller]")]

动作需要参数,不一定。仅仅因为路由参数存在并不意味着您的操作必须接受它。OP可以选择使用动作过滤器或覆盖控制器中执行的类似OnAction的内容,例如,手动访问参数。