我正在开发一个自定义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:使用缓存当然可以将数据输入控制器,我确实有一个使用缓存的工作解决方案,但这不是我提出问题的原因。我想知道我是否可以直接从路由处理程序向控制器发送数据。
答案 0 :(得分:1)
我想将我从db收到的对象传递给 控制器可能吗?
RouteConfig将从Global.asax的Application_Start()事件中触发,因此它只会被执行一次。理想情况下,此工作流程将限制您将数据从RouteConfig传递到控制器的选项数量。
我建议你将对象放在Cache object中的routeconfig中,然后在控制器中使用它。因此,您将对象放在Cache中,然后从那里开始使用Cache中的对象。
修改强>
根据您提问的更新信息,您可以使用RouteData或HttpContext.Items []集合将数据传递给控制器。