Ste*_*ger 63 asp.net-mvc asp.net-mvc-routing
题:
我正在创建一个wiki软件,基本上是维基百科/ 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
);
Run Code Online (Sandbox Code Playgroud)
现在它刚刚发生在我身上,可能会出现像'AS/400'这样的标题:http:
//en.wikipedia.org/wiki/AS/400
在整体上,还有这个(标题'Slash'):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 /(但不是/ Wiki/Edit)开头,则将所有其余URL作为Id传递.
编辑:
嗯,只是另一个问题:我如何路由这个:http:
//en.wikipedia.org/wiki/C&A
维基百科可以......
编辑:
根据维基百科,由于与wikitext语法的冲突,在页面标题中永远不能使用以下字符(DISPLAYTITLE也不支持):
# < > [ ] | { }
Run Code Online (Sandbox Code Playgroud)
编辑:
允许*和&,放
<httpRuntime requestPathInvalidCharacters="" />
Run Code Online (Sandbox Code Playgroud)
到文件web.config中的<system.web>部分
(在此处找到:http://www.christophercrooker.com/use-any-characters-you-want-in-your-urls-with-aspnet-4-and-iis)
Dar*_*rov 92
您可以使用catchall路由捕获跟随wikiurl部分的所有内容到id令牌中:
routes.MapRoute(
"Wiki",
"wiki/{*id}",
new { controller = "Wiki", action = "DbLookup", id = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
现在,如果您有以下请求:/wiki/AS/400它将映射到Wiki控制器上的以下操作:
public ActionResult DbLookup(string id)
{
// id will equal AS/400 here
...
}
Run Code Online (Sandbox Code Playgroud)
就/wiki//我而言,我相信在此请求到达ASP.NET管道之前,您将从Web服务器收到400 Bad Request错误.您可以查看以下博文.
Usm*_*man 17
在Attribute Routingmvc我有同样的问题/在字符串abc/cde中HttpGet
[Route("verifytoken/{*token}")]
[AllowAnonymous]
[HttpGet]
public ActionResult VerifyToken(string token)
{
//logic here
}
Run Code Online (Sandbox Code Playgroud)
所以你必须放置*因为在此之后它将被视为参数
小智 5
@Darin:嗯,这很明显,问题是:为什么?给出了控制器+动作+ id,它就像它将所有这些传递给路由器一样...... - Quandary 2011年6月13日17:38
Quandry - 也许你已经解决了这个问题,因为你的问题已经超过一年了,但是当你调用RedirectToAction时,你实际上是在向浏览器发送一个HTTP 302响应,这会导致浏览器向指定的动作发出GET请求.因此,你看到的无限循环.
请参阅:Controller.RedirectToAction方法
| 归档时间: |
|
| 查看次数: |
36634 次 |
| 最近记录: |