是否有文章解釋路由匹配如何工作以及它的能力?ASP.NET MVC路由捕獲全部
例如,我怎麼會寫趕上一切的路線,使:
/ /something /something/else /something/else/again
都得到映射到相同的控制器動作,與URL作爲參數傳遞?
{*anything}
以上似乎並不奏效。它可以不處理參數內的斜槓嗎?
是否有文章解釋路由匹配如何工作以及它的能力?ASP.NET MVC路由捕獲全部
例如,我怎麼會寫趕上一切的路線,使:
/ /something /something/else /something/else/again
都得到映射到相同的控制器動作,與URL作爲參數傳遞?
{*anything}
以上似乎並不奏效。它可以不處理參數內的斜槓嗎?
下面的代碼捕獲幾乎一切。
http://www.mysite.com/
例如將仍然被路由到Default.aspx的,我想。但像
http://www.mysite.com/some/page/that/doesnt/exist
將由TestRouteHandler捕獲。 {* fields}路由說明符應在傳遞給路由器的RequestContext.RouteData對象中結束,以便您可以執行任何您想要的操作。然而,在那個時候,你基本上正在實現一個重寫引擎。
public class Routes
{
public static void Register(RouteCollection routes)
{
// setup legacy url routing
routes.Add(new Route("{*fields}",new TestRouteHandler()));
}
}
public class TestRouteHandler : IRouteHandler
{
public virtual IHttpHandler GetHttpHandler(RequestContext requestContext)
{
Page page = BuildManager.CreateInstanceFromVirtualPath("/default.aspx", typeof(Page)) as Page;
return page;
}
}
或者,你可以指定喜歡
routes.Add(new Route("dave/{*fields}",new TestRouteHandler()));
頂級路線,這將趕上類的物品。
http://www.mysite.com/dave
http://www.mysite.com/dave/test/parameter
http://www.mysite.com/dave/virtually/infinite/number/of/items/goes/here
我已經用這種方法來處理,在過去的:
public ActionResult Something(string anything)
{
var anythings = anything.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
而且這條路線:
"something/{*anything}"
而且趕上了一切。這可能是一種氣味,但...
public class HomeController : Controller
{
public ActionResult Show(string anything)
{
Response.Write(anything);
return null;
}
那麼默認的路由前...
routes.MapRoute("anything", "{*anything}", new {controller="Home",action="Show"});
那麼根本,或不以「something」開頭的東西呢? –
更新了我的答案 – mxmissile
我這樣做,但它沒有工作,現在它是:更奇怪。肯定是那些星期五的時刻之一!謝謝澄清 –