首页 > 解决方案 > .NET Core (2.1) Web API 动态命名控制器操作的路由

问题描述

我需要使用 API 控制器方法的路由作为重定向的前缀。

我(当然)可以对它们进行硬编码,但我更愿意动态地获取它们,所以如果我更改路由或控制器名称,它会被逻辑更新。

  [Route("api/v1/[controller]")]
  public class TestController : ControllerBase
  {
    [HttpGet("{path}")]
    public async Task<IActionResult> Get(string path)
    {
      string prefix = "api/v1/Other/"; //how to get that part dynamically?
      return Redirect(prefix + path);
    }
  }

  [Route("api/v1/[controller]")]
  public class OtherController : ControllerBase
  {
    [HttpGet("{path}")]
    public async Task<IActionResult> Get(string path)
    {
    }
  }

如果 Route 注释或控制器名称发生变化,我如何将 TestController 中的前缀作为字符串动态更新?我真的很需要它。

标签: c#.net-coreasp.net-core-routing.net-core-2.1

解决方案


您可以尝试获取当前请求的 Route Data,更改控制器的名称并使用更新后的新 Route Data 生成一个 url:

var routeData = this.HttpContext.GetRouteData();
routeData.Values["controller"] = "Other";
string url = Url.RouteUrl(routeData.Values);
return Redirect(url);

推荐阅读