5

我有一个域“http://www.abc.com”。我已经在这个域上部署了一个 ASP.net MVC4 应用程序。我还在 RouteConfig.cs 中配置了默认路由,如下所示

routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "MyApp", action = "Home", id = UrlParameter.Optional }
            );

上述映射确保任何尝试访问“http://www.abc.com”的人都会自动显示“http://www.abc.com/MyApp/Home”页面

一切正常,但浏览器中的地址栏显示“http://www.abc.com”而不是“http://www.abc.com/MyApp/Home”。有没有办法强制浏览器显示完整的 URL,包括控制器和操作?

4

3 回答 3

2

您需要进行某种 url 重写。可能最快的方法是在 Global.asax 中将RewritePath调用添加到您的 BeginRequest。在你的情况下,它会是这样的:

void Application_BeginRequest(Object sender, EventArgs e)
{
    string originalPath = HttpContext.Current.Request.Path.ToLower();
    if (originalPath == "/") //Or whatever is equal to the blank path
        Context.RewritePath("/MyApp/Home");
}   

一种改进是动态地从路由表中提取 url 以进行替换。或者您可以使用Microsoft URL Rewrite,但这更复杂 IMO。

于 2012-10-30T02:53:11.743 回答
2

一种选择是将您的默认路由设置为新控制器,可能会BaseController通过操作调用Root

public class BaseController : Controller
{
    public ActionResult Root()
    {
        return RedirectToAction("Home","MyApp");
    }
}

并修改你RouteConfig的指向根请求:

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Base", action = "Root", id = UrlParameter.Optional }
);
于 2012-10-30T12:59:08.023 回答
1

只需删除默认参数,这里已经回答了:

如何强制 MVC 路由到 Home/Index 而不是 root?

于 2015-08-13T20:09:11.540 回答