C#MVC,将控制器动作重定向为另一个名称

时间:2017-03-03 17:37:24

标签: c# asp.net-mvc

我目前正在尝试更改Google Analytics的一些网址,因为我希望Google网站中的网址更易于阅读。

现在,我的登录页面位于根目录,仪表板页面也位于根目录。但是,当用户键入www.somesite.com/login时,我希望我的登录页面显示为www.somesite.com。截至目前,此登录页面位于accounts / login,显示www.somesite.com/accounts/login

当控制器帐户和操作登录命中时,我是否可以编辑RouteConfig文件以显示/登录?目前,这不起作用:

routes.MapRoute(
    name: "Default",
    url: "Login/{controller}/{action}/{id}",
    defaults: new
    {
        controller = "Accounts",
        action = "Login",
        id = UrlParameter.Optional
    },
    namespaces: new[] { "somenamespace" }
);

正在调用的行动:

    public ActionResult Logon()
    {
        return View(ViewModel.CreateModelForPageLoad<LogOn>());
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Logon(Logon model)
    {
         //Log in code
     }

3 个答案:

答案 0 :(得分:2)

我现在无法测试,但这应该有效:

    routes.MapRoute(
        name: "Login",
        url: "login",
        defaults: new
        {
            controller = "Accounts",
            action = "Logon"
        }
    );

答案 1 :(得分:0)

        routes.MapRoute(
        name: "Default",
        url: "Login",
        defaults: new
        {
            controller = "Accounts",
            action = "Login",
            id = UrlParameter.Optional
        },
        namespaces: new[] { "somenamespace" }
    );

更简单的方法是进行属性路由,然后你只需要这个

public class Accounts : Controller{
    [HttpPost, Route("login")]
    public ActionResult Login(int id)
    {....}
}

上面当然可以在MVC 5中工作,因为属性路由是从MVC 5开始添加的。

答案 2 :(得分:0)

public class HomeController:Controller     {

    public ActionResult Login()
    {
        return View();
    }

    public ActionResult Dashboard()
    {
        return View();
    }

}

公共类RouteConfig     {         public static void RegisterRoutes(RouteCollection routes)         {             routes.IgnoreRoute(&#34; {资源}个.axd / {*} PATHINFO&#34);

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

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