如果我創建了一個MVC動作或動作鏈接,例如@Url.Action("Index", "Home")"
我被重定向到http://www.example.com,但我想要的是強制它重定向到http://www.example.com/Home/Index或http://www.example.com/Home。有沒有辦法顯式渲染完整路徑?我的Google搜索空着。如何強制MVC路由到Home/Index而不是根目錄?
4
A
回答
4
Url.Action()
使用路由生成URL。所以如果你想改變它,你必須改變它。它目前表示默認控制器是Home
,默認操作是Index
。將它們更改爲其他任何內容,然後它會給你一個不同的URL。
例如你的路由的配置可能是這樣的:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
更改默認爲任何其他人或刪除它們:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { id = UrlParameter.Optional }
);
注意,這樣做意味着您的網頁將只能訪問通過完整的controller/action
路徑,所以你可能想創建一個登陸頁面,並將其作爲默認值。
如果你絕對需要知道一個動作的完整URL,那麼你可以這樣做。首先創建一個額外的路線並將其放在路線配置的底部。這將永遠不會被系統使用的默認:
routes.MapRoute(
name: "AbsoluteRoute",
url: "{controller}/{action}/{id}",
defaults: new { id = UrlParameter.Optional }
);
然後在代碼中,你可以調用這個(不知道它在剃刀可用,但它應該是容易寫一個輔助方法):
var fullURL = UrlHelper.GenerateUrl("AbsoluteRoute", "Index", "Home", null, null, null, null, System.Web.Routing.RouteTable.Routes, Request.RequestContext, false);
1
您可能需要爲默認路線之前的Home/Index創建特定路線。然後,您可以將默認路線和主頁/索引路線指向同一地點。但是,如果您轉到基本路由,這將不會將您重定向到主頁/索引...因此,您必須添加url重定向,無論是在IIS級別(有設置都可以這樣做),或者您可以添加代碼到您的索引頁面查看網址並重定向到完整的網址。
或者,您可以刪除默認的控制器和操作值,然後將URL重定向添加到您的IIS配置,以便在您轉到根目錄時將其重定向到完整路徑。
+0
嗯有趣的方法。想想看,使用純粹的MVC,但仍然得到了我的+1。 – DavidG 2014-10-10 15:06:29
相關問題
- 1. Webform路由主頁在像mvc而不是根目錄的文件夾中
- 2. 將ASP.NET MVC根應用程序路由到MVC虛擬目錄
- 3. 製作css圖像絕對路徑轉到子目錄的根目錄,而不是主域的根目錄
- 4. 獲取MVC忽略路由到網站根目錄
- 5. 在MVC中路由到子目錄
- 6. 如何使用zend 2路由將頁面路由到站點的根目錄
- 7. 如何路由到默認控制器而不是index.html?
- 8. Laravel從子目錄路由HTTP請求回到根目錄
- 9. MvcContrib強類型BeginForm重載路由到便攜區而不是消耗路由
- 10. 如何將文件和目錄路由到ASP.NET MVC
- 11. 有鏈接使用AngularJS路由而不是MVC路由
- 12. ASP.NET MVC 3:如何強制ActionLink執行HttpPost而不是HttpGet?
- 13. 如何強制鏈接使用特定航線(MVC路由)
- 14. 如何強制Default.aspx的,而不是www.domain.com
- 15. 如何強制輸入路由參數?
- 16. 帶虛擬目錄的MVC路由
- 17. 強制<a href="/"></a>解析爲虛擬目錄的根目錄而不是站點
- 18. .NET如何檢查路徑是文件而不是目錄?
- 19. asp.net mvc路由到自定義處理程序而不是控制器?
- 20. 定製MVC路由
- 21. mod_rewrite的糾正目錄,而不是根目錄
- 22. 將子目錄重定向到根目錄而不更改URL
- 23. 強制WebChromeClient而不是WebViewClient
- 24. PHP:強制從目錄根目錄下載圖像?
- 25. 如何控制ASP.NET MVC路由生成?
- 26. C#如何獲取目錄的名稱而不是路徑?
- 27. 如何從目錄,而不是整個路徑
- 28. 將應用程序根目錄路由到/ swagger
- 29. 爲$ _SERVER [「DOCUMENT_ROOT」]使用文檔根目錄而不是虛擬文檔根目錄
- 30. NuGet包將非託管dll複製到根目錄而不是bin
看起來很合理,但我需要將主頁作爲登錄頁面。這不可行嗎? – 2014-10-10 14:28:27
好的,我會更新,但...這可能是一個壞主意,尤其是對於SEO。 – DavidG 2014-10-10 14:29:23
這是一個內聯網站點,所以SEO不是一個問題。 – 2014-10-10 14:30:50