asp.net-mvc - 以编程方式将路线映射到 Controller

标签 asp.net-mvc

是否可以通过编程方式将路由映射到 Controller ?换句话说,我想创建一个没有 Controller 的路由,并根据 url 中其余参数的值将正确的 Controller 映射到请求?

一个例子:

网址:example.com/about-us

我想在我们的系统中查找“about-us”正在使用哪个 Controller ,然后为请求设置 Controller 。它不能是默认 Controller ,因为会有许多不同的页面(如上面的页面)使用不同的 Controller 。

最佳答案

你为什么需要这个?处理这种情况的正常 MVC 方法是为不同的 Controller 添加不同的路由,指定路由本身内部的参数值或使用 RouteConstraints。

另一种方法(如果您真的坚持自己执行路由逻辑)可能是创建一个“路由 Controller ”,例如使用处理所有查询的单个操作。在此操作代码中,您可以检查参数值并执行 return RedirectToAction(...) 将请求重定向到您需要的任何 Controller 上的任何操作。

更新:示例代码

在 Global.asax.cs 中创建以下默认路由:

routes.MapRoute(
    "Default", // Route name
    "{*pathInfo}", // URL with parameters
    new { controller = "Route", action = "Index"} // Parameter defaults
);

还添加一个 Controller 类 RouteController.cs,其中包含以下内容:

// usings here...

namespace YourApp.Controllers
{
    public class RouteController : Controller
    {
        public ActionResult Index(string pathInfo)
        {
            ...
            // programmatically parse pathInfo and determine 
            // controllerName, actionName and routeValues 
            // you want to use to reroute current request
            ...

            return RedirectToAction(actionName, controllerName, routeValues);
        }
    }
}

关于asp.net-mvc - 以编程方式将路线映射到 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9289925/

相关文章:

asp.net-mvc - 上传包含在 MVC 模型中的图像

javascript - 如何在 MVC 应用程序中解析来自 JavaScript 的相对路径

asp.net-mvc - 如何在注销时清除/过期浏览器缓存?

asp.net-mvc - MVC中的HitCounter

asp.net - 将 ASP.NET 身份存储移动到 EF Sql 数据库

css - 使用 Bootstrap 的图像标签宽度和高度

asp.net-mvc - 如何提交本地jqgrid数据和表单输入元素

c# - 初学者。 cshtml if,随机数和传回数据

asp.net-mvc - 将MVC添加到VS2015中的空ASP.NET 5项目: Empty 500 Responses

asp.net-mvc - ASP.NET MVC 与时代精神