.NET Core (2.1) web API 控制器动作路由的动态命名
.NET Core (2.1) web API dynamic naming of routes to controller actions
我需要使用 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 中的前缀作为动态更新的字符串获取?
我真的需要它在 string.
您可以return一个RedirectToActionResult instead of a RedirectResult to redirect to a specific controller action by calling eg RedirectToAction,例如:
return RedirectToAction("Other","OtherAction");
或使用RedirectToRoute:
return RedirectToRoute(new {action="OtherAction",controller="Other"});
正在生成 URL
URL Generation section in the Routing to controller actions in ASP.NET Core 文章展示了如何使用 URL.Action
生成绝对 link 到另一个控制器的动作。来自示例:
var url = Url.Action("Buy", "Products", new { id = 17, color = "red" });
return Content(url);
根据问题对此进行调整:
var url = Url.Action("OtherAction", "Other");
return Redirect(url);
Url
是 IUrlHelper
的实例
您可以尝试获取当前请求的路由数据,更改控制器的名称并使用更新后的新路由数据生成url:
var routeData = this.HttpContext.GetRouteData();
routeData.Values["controller"] = "Other";
string url = Url.RouteUrl(routeData.Values);
return Redirect(url);
我需要使用 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 中的前缀作为动态更新的字符串获取? 我真的需要它在 string.
您可以return一个RedirectToActionResult instead of a RedirectResult to redirect to a specific controller action by calling eg RedirectToAction,例如:
return RedirectToAction("Other","OtherAction");
或使用RedirectToRoute:
return RedirectToRoute(new {action="OtherAction",controller="Other"});
正在生成 URL
URL Generation section in the Routing to controller actions in ASP.NET Core 文章展示了如何使用 URL.Action
生成绝对 link 到另一个控制器的动作。来自示例:
var url = Url.Action("Buy", "Products", new { id = 17, color = "red" });
return Content(url);
根据问题对此进行调整:
var url = Url.Action("OtherAction", "Other");
return Redirect(url);
Url
是 IUrlHelper
您可以尝试获取当前请求的路由数据,更改控制器的名称并使用更新后的新路由数据生成url:
var routeData = this.HttpContext.GetRouteData();
routeData.Values["controller"] = "Other";
string url = Url.RouteUrl(routeData.Values);
return Redirect(url);