2011-09-25 60 views
2

http://myhost/MyController/DoSomething/Anything%252fAnything是錯誤請求不能編碼在URL斜槓

http://myhost/MyController/DoSomething/Anything%2fAnything相同http://myhost/MyController/DoSomething/Anything/Anything

什麼URL發送字符串"Anything/Anything"到我的控制器?

如何使Html.ActionLink生成URL?

編輯:應該能夠處理"Anything/Anything/Anything/Anything....../Anything"

我使用MVC 3

+0

你是如何調用的http: // myhost/MyController/DoSomething/Anything%252fAnything? – jzm

+0

我打電話給myhost/MyController/DoSomething/Anything/Anything,但它使路由系統迷路,所以我試圖用%252f和%2f編碼斜槓,但它不起作用。 – Eduardo

+0

是的,但是你怎麼稱呼它?你的觀點是否通過一些幫手?如果是這樣,你可以發佈代碼嗎? – jzm

回答

2

如果要定義定義變量lenght路由的路由時,可以使用這種定義:

routes.MapRoute("MyRoute", "{controller}/{action}/{id}/{*catchall}", 
new { controller = "Home", action = "Index", id = UrlParameter.Optional }); 

之前其他路由定義把它放在你global.asax.cs

0

路由機制要處理的斜線。 所以添加路由規則,如

url = [controller]/[action]/[id1]/[id2] 

post

或者所使用的網址,如

http://myhost/MyController/DoSomething/Anything?id2=Anything 

它可能會處理作爲默認的 - 但在這種情況下,其他路線的規則必須明確不匹配您的控制器/操作名稱。否則,將適用先前的規則。

也可能是整個網址可從系統變量中獲得。你的控制器是否被調用?

+0

嗨拉里。我的控制器沒有被調用。我的實際路線類似於「Announce-Job-For- {seo_friendly_category_name}/{category_id}」。即使當seo_friendly_category_name包含斜線但控制器根本不被調用時,ActionLink也能夠生成鏈接。所以我試圖編碼斜槓。 – Eduardo

+0

您的控制器沒有被調用,因爲沒有路由匹配傳入的url。傳出鏈接的創建是分開的。爲你的網址添加一條匹配的路線,然後你的控制器將被調用。請記住路徑定義的順序。 –

+0

它匹配。如果沒有,那麼ActionLink將不會生成seo友好鏈接。 – Eduardo