问题:
我正在创建一个 wiki 软件,基本上是 wikipedia/mediawiki 的克隆,但是使用 ASP.NET MVC(MVC 是重点,所以不推荐我 ScrewTurn)。
现在我有一个问题:
我使用此路由映射来路由 URL,例如:
http://en.wikipedia.org/wiki/ASP.NET
routes.MapRoute(
"Wiki", // Routenname
//"{controller}/{action}/{id}", // URL mit Parametern
"wiki/{id}", // URL mit Parametern
new { controller = "Wiki", action = "dbLookup", id = UrlParameter.Optional } // Parameterstandardwerte
);
现在我突然想到,可能会有像“AS/400”这样的标题:
http://en.wikipedia.org/wiki/AS/400
顺便说一句,还有这个(标题“斜线”):
http://en.wikipedia.org/wiki//
还有这个:
http://en.wikipedia.org/wiki//dev/null
总的来说,维基百科似乎有一个有趣的标题列表,如下所示: http://en.wikipedia.org/wiki/Wikipedia:Articles_with_slashes_in_title
如何正确制作像这样的路线?
编辑:
类似于:
如果 URL 以/Wiki/开头,并且不以/wiki/Edit/开头
(但不是/维基/编辑)
然后将 URL 的其余部分作为 Id 传递。
编辑:
嗯,还有一个问题:
我该如何路由这个:
http://en.wikipedia.org/wiki/C&A
维基百科可以...
编辑:
根据维基百科,由于与维基文本语法冲突,只有以下字符永远不能在页面标题中使用(DISPLAYTITLE 也不支持它们):
# < > [ ] | { }
编辑:
要允许 * 和 &,请输入
<httpRuntime requestPathInvalidCharacters="" />
进入文件 web.config 中的
(在这里找到:http://www.christophercrooker.com/use-any-characters-you-want-in-your-urls-with-aspnet-4-and-iis)
最佳答案
您可以使用包罗万象的路由将网址 wiki
部分后面的所有内容捕获到 id
token 中:
routes.MapRoute(
"Wiki",
"wiki/{*id}",
new { controller = "Wiki", action = "DbLookup", id = UrlParameter.Optional }
);
现在,如果您有以下请求:/wiki/AS/400
,它将映射到 Wiki
Controller 上的以下操作:
public ActionResult DbLookup(string id)
{
// id will equal AS/400 here
...
}
就 /wiki//
而言,我相信在此请求到达 ASP.NET 管道之前,您会从 Web 服务器收到 400 Bad Request 错误。您可以查看following blog post .
关于asp.net-mvc - 参数中带有斜杠的 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6328713/