0

我们正在使用具有以下设置的 Piranha CMS:

<prefixlessPermalinks value="true" />

但是,这会破坏使用永久链接帮助器生成的单个帖子 url,例如

@UI.Permalink(post.PermalinkId)

将 prefixlessPermalinks 设置为 False 这通常是生成的 url:/ home /1st-test-blog-entry

将 prefixlessPermalinks 设置为 True 生成的 url 变为:/1st-test-blog-entry (“home”已被删除,因为它是无前缀的)

跟随无前缀 url 会生成以下异常:

System.Web.HttpException:无法使用前导 .. 退出顶级目录。

任何想法如何绕过这个问题?

尝试的解决方法:

我手动为生成的永久链接添加前缀“/post”,然后添加了以下捕获请求的路由映射:

routes.MapRoute(
    name: "Post",
    url: "post/{permalink}",
    defaults: new { controller = "Post", action = "Index", permalink = UrlParameter.Optional },
    namespaces: new[] { "Maps.Portal.Controllers" }
).DataTokens["UseNamespaceFallback"] = false;

以下控制器捕获请求:

public ActionResult Index(string permalink)
{
    var model = GetModel(permalink);

    return View(model.GetView(), model);
}

但由于未填充只读 SinglePostController.CurrentPermalink 属性而失败,因此导致 Piranha CMS 引发异常。有趣的是,当 CMS 正在填充 CurrentPermalink 时正在查看帖子的草稿版本时,此控制器会正确触发。

4

2 回答 2

2

经过实验,我可以确认问题不在于 Piranha CMS,而在于 MVC 共享布局。仍在尝试追踪它,但剥离除 CMS 内容之外的所有内容允许显示帖子页面。

更新:

我终于将其归结为@Url.Content(url) 的多种用途。非常奇怪,因为所有似乎都是有效的 url,例如 @Url.Content("~/Content/images/ios/57x57iOS.png")。一旦这些都被删除,页面就会正确呈现!?

发现:

这个问题对我来说只是开发环境的问题......

从 VS2012 在 Visual Studio Development Server 中运行该站点会导致此错误,但是一旦将 Web 应用程序部署到 IIS8,该问题就消失了。

于 2014-03-20T22:02:31.593 回答
1

我无法使用 MVC 或网页重现您的错误,事实上,我们在我部署的几乎所有实时安装中都使用无前缀永久链接。我启动了 MVC 模板,安装了一个新的数据库并添加了一个带有您指定的标题/永久链接的帖子,它显示没有前缀永久链接的问题。

在此处输入图像描述

你是如何设置你的安装的?

问候

/哈坎

于 2014-03-20T07:45:44.027 回答