ASP.Net MVC重定向到“/”而不是指定的操作

时间:2015-06-11 15:43:01

标签: asp.net-mvc

我在我的控制器中使用此方法来处理登录凭据的提交。

[HttpPost]
public ActionResult Login(LoginForm form)
{
    if (ModelState.IsValid)
    {
        var user = userService.Login(form); // determine if the form data authenticates a valid user
        if (user != null)
        {
            // OMITTED: Indicate correct credentials.
            if (System.String.IsNullOrWhiteSpace(form.returnUrl) || (form.returnUrl == "/"))
            {
                var outbound = RedirectToAction("defaultAction", "defaultController");
                return outbound;
            }
            return Redirect(form.returnUrl);
        }
        // OMITTED: Indicate incorrect credentials.
        return View(form);
    }
    // OMITTED: Indicate improper form input
    return View(form);
}

IntelliTrace报告“返回出站”后的事件为ASP.Net: Redirect to "/"。这显然不正确;它应该是defaultController/defaultAction。为什么会发生这种情况?我该如何解决?

更新1:路线配置:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

1 个答案:

答案 0 :(得分:1)

这是预期的。由于您要重定向到defaultController/defaultAction,并且在路由配置中将其配置为默认值,因此MVC使用URL /来引用默认控制器和操作。

如果您想使用网址/defaultController/defaultAction,则需要进行不同的重定向,特别是不要使用RedirectToAction

var outbound = Redirect("defaultController/defaultAction");
return outbound;

或者,更改您的路线配置以使用其他默认操作,然后您的代码将生成您期望的网址。