【发布时间】:2016-09-22 13:44:45
【问题描述】:
我有两个控制器 Base 和 Login。
基础控制器:
public ActionResult start()
{
string action = Request.QueryString[WSFederationConstants.Parameters.Action];
}
登录控制器:
public ActionResult Login(string user,string password,string returnUrl)
{
if (FormsAuthentication.Authenticate(user, password))
{
if (string.IsNullOrEmpty(returnUrl) && Request.UrlReferrer != null)
returnUrl = Server.UrlEncode(Request.UrlReferrer.PathAndQuery);
return RedirectToAction("Start","Base", returnUrl });
}
return View();
}
身份验证完成后,它会按预期重定向到基本控制器中的启动操作。 但是查询字符串不获取值。当悬停在查询字符串上时,它显示长度值但不显示 uri。
如何在 Base Controller 中使用 Login 控制器发送的 url 并从中获取参数?
【问题讨论】:
-
什么是
WSFederationConstants.Parameters.Action。如果该常量的值为"returnUrl",则它必须是return RedirectToAction("Start","Base", new { returnUrl = returnUrl });(你得到length=9,因为“returnUrl”中有9个字符) -
按照@StephenMuecke 的建议,我做到了并且能够在基本控制器中获取 url。但是获取的 url 格式不正确,它带有 '%2f%f wsignin...' 代替 /(斜杠)和 ?(问号),因此操作变量无法从查询字符串中获取操作。
-
那是因为该方法对其进行了编码。但这样做的目的是什么?如果你有
returnUrl的值,为什么不直接使用return RedirectToLocal(returnUrl);重定向到它 - 你的start()方法是做什么用的? -
我的url里面有很多参数,不仅仅是action参数,还有登录的参数。
-
这有什么不同。
标签: c# asp.net asp.net-mvc asp.net-mvc-4