是否可以从RouteConfig将数据传递给控制器

时间:2014-02-03 13:47:14

标签: asp.net-mvc asp.net-mvc-routing asp.net-mvc-5

我正在开发一个自定义CMS,我正在从头开始。

我创建了一个自定义路由处理程序,将动态Url传递给正确的控制器。遗憾的是,我需要查找数据库中的url以找到相应的控制器。

我想将从db接收到的对象传递给控制器​​这可能吗?原因是当我到达控制器时防止第二次访问数据库,因为我打算在那里使用相同的对象。

如果重要,我正在使用MVC 5和Dynamo DB。

TL; DR;是否可以从RouteConfig将对象传递给控制器​​。

编辑:为了清楚起见,我正在添加路由和处理程序中的代码,虽然我看不出它为何重要。

路线:

routes.MapRoute(name: "Default", url: "{*UrlName}").RouteHandler = new UrlNameRouteHandler();

自定义处理程序:

public class UrlNameRouteHandler : MvcRouteHandler
{
    protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        var urlName = requestContext.RouteData.Values["UrlName"] != null ? requestContext.RouteData.Values["UrlName"].ToString() : "Start";
        var page = PageManager.GetPageByUrlName(urlName);
        requestContext.RouteData.Values["controller"] = page.ControllerName;
        requestContext.RouteData.Values["action"] = "index";

        return base.GetHttpHandler(requestContext);
    }
}

EDIT2:使用缓存当然可以将数据输入控制器,我确实有一个使用缓存的工作解决方案,但这不是我提出问题的原因。我想知道我是否可以直接从路由处理程序向控制器发送数据。

1 个答案:

答案 0 :(得分:1)

  

我想将我从db收到的对象传递给   控制器可能吗?

RouteConfig将从Global.asax的Application_Start()事件中触发,因此它只会被执行一次。理想情况下,此工作流程将限制您将数据从RouteConfig传递到控制器的选项数量。

我建议你将对象放在Cache object中的routeconfig中,然后在控制器中使用它。因此,您将对象放在Cache中,然后从那里开始使用Cache中的对象。

修改

根据您提问的更新信息,您可以使用RouteData或HttpContext.Items []集合将数据传递给控制器​​。