我们正在开始一个新的项目,sitecore作为我们的CMS。我正在考虑使用Sitecore作为内容创作工具,并与Sitecore一起使用ASP.net MVC作为内容交付(CDA端)。很想听听你对此的想法和想法。
有人试过这个吗?
sitecore和MVC是竞争技术还是互补技术?
欢迎任何架构上的想法。
发布于 2009-11-03 23:29:59
在某些情况下,将两者合并可能会带来巨大的好处。MVC不太适合内容驱动的网站。然而,具有结构化流程和多种数据表示的web应用程序会从中受益良多。当涉及到数据的多个表示时,Sitecore有一些限制--您只能在一个项目上定义一组设计细节。如果您不需要WYSIWYG编辑或简单的一键预览,您可以使用Sitecore作为数据存储库,并利用其管道中的一些上下文值(例如语言)。
要实现这一点,需要对Sitecore HTTP管道进行一些修改:
1)如果使用IIS6中的aspx扩展来让ASP.NET处理MVC请求(例如/Controller.aspx/Action),修复Sitecore的FilePath解析(Sitecore解析FilePath的方式中存在一个错误,这将导致路径被截断)。
要解决此问题,请在httpRequestBegin流水线的开头放置一个新处理器。
public class MvcFixHttpProcessor : Sitecore.Pipelines.HttpRequest.HttpRequestProcessor
{
public override void Process(Sitecore.Pipelines.HttpRequest.HttpRequestArgs args)
{
//when using a path such as /Controller.aspx/Blahblahblah, Sitecore's parsing of FilePath can break if Blahblahblah is too long
RouteData routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(args.Context));
if (routeData != null)
{
args.Url.FilePath = args.Context.Request.Url.LocalPath;
}
}
}(编辑2011年9月13日:我已经有一段时间没有使用上面的修复了。)
2)告诉Sitecore忽略路由到ASP.NET MVC的URL
为此,请在ItemResolver之后的httpRequestBegin流水线中放置一个新处理器。
public class SystemWebRoutingResolver : Sitecore.Pipelines.HttpRequest.HttpRequestProcessor
{
public override void Process(Sitecore.Pipelines.HttpRequest.HttpRequestArgs args)
{
RouteData routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(args.Context));
if (routeData != null)
{
args.AbortPipeline();
}
}
}如果在Sitecore URL中使用语言,则需要添加一些将Sitecore链接生成与MVC生成相结合的自定义逻辑,以确保将语言添加到ActionLink URL的开头。但是,通过上面的管道修改,将语言添加到URL应该不会对MVC路由产生副作用(因为Sitecore在读取语言后重写URL )。
同样,这种方法只对某些类型的应用程序有用。不过,在这些情况下,Sitecore为您的模型提供了一个很好的数据层。研究如何创建自定义项包装器,以基于Sitecore项创建强类型的域对象。
(2011年9月13日编辑:自定义项目生成器对此非常有用。http://blog.velir.com/index.php/2010/10/19/custom-item-generator/)
祝你好运。
发布于 2009-08-21 10:55:49
我认为你在这里应该问的真正问题是:如果你已经有了Sitecore -为什么你还想要引入MVC的开销和复杂性?
在基本网站之外,您是否有任何需要MVC的业务需求?
发布于 2010-04-01 07:12:20
我赞同Mark关于需求的评论。冒这个险值得吗?如果您决定不使用本机渲染功能,则很可能会丢失Sitecore的以下功能:
适用于营销者的
也许更多。
https://stackoverflow.com/questions/1308226
复制相似问题