我在我的控制器中使用此方法来处理登录凭据的提交。
[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 :(得分:1)
这是预期的。由于您要重定向到defaultController/defaultAction
,并且在路由配置中将其配置为默认值,因此MVC使用URL /
来引用默认控制器和操作。
如果您想使用网址/defaultController/defaultAction
,则需要进行不同的重定向,特别是不要使用RedirectToAction
。
var outbound = Redirect("defaultController/defaultAction");
return outbound;
或者,更改您的路线配置以使用其他默认操作,然后您的代码将生成您期望的网址。