如果我创建了一个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