2015-06-11 74 views
0

我在我的控制器中使用了此方法來處理登錄憑據的提交。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 } 
     ); 
    } 
} 
+0

http://stackoverflow.com/questions/9554115/redirect-to-return-url-after-login – GANI

+0

請顯示您的路線配置。 –

+0

添加路由配置。 –

回答

1

這是預期的。由於您重定向到defaultController/defaultAction,並且您將這些配置爲路由配置中的默認值,因此MVC使用url /來引用默認控制器和操作。

如果你想使用url /defaultController/defaultAction,你將需要做不同的重定向,特別是不要使用RedirectToAction

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

或者,將您的路由配置更改爲使用其他默認操作,然後您的代碼將生成您期望的url。

+0

或者只是'重定向(「/」);'。 –