我有两个控制器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();
}
完成身份验证后,它会按预期重定向到Base Controller中的Start操作。 但是查询字符串不能获取值。当悬停在查询字符串上时,它显示长度值,但不显示uri。
如何使用从Base Controller中的Login控制器发送的url并从中获取参数?
答案 0 :(得分:0)
您实际上是将302返回给客户端。 来自docs。
返回对浏览器的HTTP 302响应,从而导致浏览器 向指定的操作发出GET请求。
当这样做时,客户端将使用您创建的URL发出另一个请求。在你的情况下,像youruri.org/Base/Start
。请查看浏览器中的网络标签(Chrome中的F12)。
我认为你想做的是:
return RedirectToAction
("Start", "Base", new { WSFederationConstants.Parameters.Action = returnUrl });
假设WSFederationConstants.Parameters.Action
是常数。如果WSFederationConstants.Parameters.Action
返回字符串fooUrl
,您的操作会将以下内容返回给浏览器:
Location:/Base/Start?fooUrl=url
Status Code:302 Found
另一种选择是将值实际传递给控制器:
public class BaseController: Controller
{
public ActionResult start(string myAction)
{
string localAction = myAction; //myAction is automatically populated.
}
}
在你的重定向中:
return RedirectToAction
("Start", "Base", new { myAction = returnUrl });
然后BaseController
会自动获取参数,而您不需要从查询字符串中获取它。