c# - .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 中的前缀作为字符串动态更新?我真的很需要它。
解决方案
您可以尝试获取当前请求的 Route Data,更改控制器的名称并使用更新后的新 Route Data 生成一个 url:
var routeData = this.HttpContext.GetRouteData();
routeData.Values["controller"] = "Other";
string url = Url.RouteUrl(routeData.Values);
return Redirect(url);
推荐阅读
- r - 在 Centos 6 上的 R 3.5.0 中安装 RCurl - 找不到 libicui18n.so.58
- python - 减少 Python 中的“if in”语句
- node.js - Alexa AWS 错误:任务在 3.00 秒后超时
- scala - Scala在使用函数时出现“类型不匹配错误”,但适用于方法
- git - git rebase 干运行的差异
- javascript - forEach 中的异步函数在之前的 const 声明时执行
- python - 在熊猫中添加到窗口
- android - 如何从 web 视图调用生物识别设备?
- python - Keras Tensorflow reshape error during epoch
- android - How to Bind Click Listener to Button added from another Activity through Inflater In Android