如果我創建了一個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. MVC項目路由不是路由.html到自定義路由
- 3. 將ASP.NET MVC根應用程序路由到MVC虛擬目錄
- 4. .htaccess如何路由/和/子目錄到根目錄
- 5. 製作css圖像絕對路徑轉到子目錄的根目錄,而不是主域的根目錄
- 6. 如何路由到目錄?
- 7. Backbone.js強制登錄路由
- 8. 獲取MVC忽略路由到網站根目錄
- 9. 強制控制器的mvc路由
- 10. 在MVC中路由到子目錄
- 11. 如何使用zend 2路由將頁面路由到站點的根目錄
- 12. 如何路由到默認控制器而不是index.html?
- 13. MVC應用程序中的路由 - 強制路由轉到MVC路由而不是物理web表單文件夾
- 14. Laravel從子目錄路由HTTP請求回到根目錄
- 15. MvcContrib強類型BeginForm重載路由到便攜區而不是消耗路由
- 16. 如何將文件和目錄路由到ASP.NET MVC
- 17. MVC路由 - 使用NGINX路由而不是PHP(或Ruby等)
- 18. 有鏈接使用AngularJS路由而不是MVC路由
- 19. ASP.NET MVC 3:如何強制ActionLink執行HttpPost而不是HttpGet?
- 20. 如何強制鏈接使用特定航線(MVC路由)
- 21. 找不到MVC的根目錄
- 22. Javascript調用相對路徑而不是從web根目錄
- 23. behat.yml在app/config而不是根目錄
- 24. 如何強制Default.aspx的,而不是www.domain.com
- 25. 如何強制輸入路由參數?
- 26. 使用Axis和Ant在./src而不是根目錄中生成存根(stub)而不是根目錄
- 27. 強制網頁根目錄使用http
- 28. Zend多目錄和MVC路由
- 29. 帶虛擬目錄的MVC路由
- 30. 重寫MVC路由的虛擬目錄
看起來很合理,但我需要將主頁作爲登錄頁面。這不可行嗎? – 2014-10-10 14:28:27
好的,我會更新,但...這可能是一個壞主意,尤其是對於SEO。 – DavidG 2014-10-10 14:29:23
這是一個內聯網站點,所以SEO不是一個問題。 – 2014-10-10 14:30:50