asp.net-mvc - 参数中带有斜杠的 URL?

标签 asp.net-mvc asp.net-mvc-routing

问题:

我正在创建一个 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 也不支持它们):

# < > [ ] | { }

http://en.wikipedia.org/wiki/Wikipedia:Naming_conventions_(technical_restrictions)#Forbidden_characters

编辑:
要允许 * 和 &,请输入

<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/

相关文章:

c# - LINQ 查询 SQL HAVING CLAUSE

html - mvc 5 @html.editorfor 类不适合父宽度

asp.net-mvc - 让 Piranha CMS 与 MVC 配合使用

c# - 子属性的选择性验证 - MVC 中的 Fluent Validation

asp.net-mvc - MVC3 MapRoute问题

asp.net-mvc - 似乎无法让 MvcSiteMapProvider 处理具有路由值的路由

asp.net-mvc-2 - 在 ASP.Net MVC 2 中的整个站点中持久化查询字符串参数

asp.net-mvc - ASP.Net MVC 5 + SignalR + Ninject

asp.net - 具有不同参数类型的 MVC3 路由

c# - ASP.NET MVC Url.Action 和路由名称值