using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Routing;
[ApiController]
public class MyController : ControllerBase {
private readonly IInlineConstraintResolver _inlineConstraintResolver;
private readonly IRouter _router;
public MyController(IInlineConstraintResolver inlineConstraintResolver, IRouter router) {
_inlineConstraintResolver = inlineConstraintResolver;
_router = router;
}
public async Task<IActionResult> InvokeController(string controllerName, string actionName) {
var values = new RouteValueDictionary(new { controller = controllerName, action = actionName });
// 这里使用的是 ControllerContext,也可以通过创建自己的 ActionContext 实例来实现
var context = new ControllerContext();
context.RouteData = new RouteData();
context.RouteData.Values.Add("controller", controllerName);
context.RouteData.Values.Add("action", actionName);
var virtualPath = _router.GetVirtualPath(context, values); // 获取十分路径
if (virtualPath == null) {
return NotFound();
}
var routeContext = new RouteContext(context);
routeContext.RouteData.Routers.Add(_router);
routeContext.RouteData.Values = values;
routeContext.HttpContext = HttpContext; // 指定当前请求的HttpContext
routeContext.ConstraintResolver = _inlineConstraintResolver;
await _router.RouteAsync(routeContext); // 执行路由匹配操作
if (!routeContext.IsHandled) {
return NotFound();
}
return new EmptyResult();
}
}
asp.net core 如何自己调用路由系统,路由到controller
于 2024-06-10 09:28:37 首次发布