我们正在使用具有以下设置的 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 时正在查看帖子的草稿版本时,此控制器会正确触发。