C# 无法在asp.net mvc控制器中获取returnurl
我有两个基本控制器和登录控制器 基本控制器:C# 无法在asp.net mvc控制器中获取returnurl,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我有两个基本控制器和登录控制器 基本控制器: public ActionResult start() { string action = Request.QueryString[WSFederationConstants.Parameters.Action]; } public ActionResult Login(string user,string password,string returnUrl) { if (FormsAuthe
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();
}
public class BaseController: Controller
{
public ActionResult start(string myAction)
{
string localAction = myAction; //myAction is automatically populated.
}
}
登录控制器:
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();
}
public class BaseController: Controller
{
public ActionResult start(string myAction)
{
string localAction = myAction; //myAction is automatically populated.
}
}
身份验证完成后,它将被重定向,以按预期在基本控制器中启动操作。
但是querystring不能获取值。当鼠标悬停在查询字符串上时,它显示长度值,但不显示uri
如何使用从基本控制器中的登录控制器发送的url并从中获取参数?您实际上是在向客户端返回302。 从 向浏览器返回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 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();
}
public class BaseController: Controller
{
public ActionResult start(string myAction)
{
string localAction = myAction; //myAction is automatically populated.
}
}
在你的重定向中:
return RedirectToAction
("Start", "Base", new { myAction = returnUrl });
然后,
BaseController
将自动获取参数,您不需要从querystring获取参数。您实际上是在向客户端返回302。
从
向浏览器返回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 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();
}
public class BaseController: Controller
{
public ActionResult start(string myAction)
{
string localAction = myAction; //myAction is automatically populated.
}
}
在你的重定向中:
return RedirectToAction
("Start", "Base", new { myAction = returnUrl });
然后,
BaseController
将自动获取参数,您不需要从查询字符串中获取它。什么是WSFederationConstants.Parameters.Action
。它需要是returnredirectotoaction(“Start”,“Base”,new{returnUrl=returnUrl})
如果该常量的值是@StephenMuecke建议的“returnUrl”
(因为“returnUrl”中有9个字符,所以您得到的长度=9
),我就这样做了,并且能够在基本控制器中获得url。但是获取的url格式不正确,它使用“%2f%f wsignin…”代替/(斜杠)和?(问号),因此操作变量无法从querystring获取操作。这是因为该方法对其进行了编码。但这样做的目的是什么?如果您有returnUrl
的值,为什么不使用return RedirectToLocal(returnUrl)重定向到它代码>-您的start()
方法用于什么?我在url中有许多参数。它不仅仅是操作参数。它还有用于执行登录的参数。这有什么区别。什么是WSFederationConstants.parameters.action
。它需要是returnredirectotoaction(“Start”,“Base”,new{returnUrl=returnUrl})
如果该常量的值是@StephenMuecke建议的“returnUrl”
(因为“returnUrl”中有9个字符,所以您得到的长度=9
),我就这样做了,并且能够在基本控制器中获得url。但是获取的url格式不正确,它使用“%2f%f wsignin…”代替/(斜杠)和?(问号),因此操作变量无法从querystring获取操作。这是因为该方法对其进行了编码。但这样做的目的是什么?如果您有returnUrl
的值,为什么不使用return RedirectToLocal(returnUrl)重定向到它代码>-你的start()
方法用于什么?我在url中有许多参数。它不仅仅是操作参数。它有参数来执行登录。这有什么区别。我在url中有许多参数。我必须使用querystring获取它们,正如stephen所建议的那样,我能够在Base Controller中获取url。但是获取的url格式不正确,它使用“%2f%f wsignin…”代替/(斜杠)和?(问号),因此操作变量无法从querystring获取操作。我在url中有许多参数。我必须使用querystring获取它们,正如stephen所建议的那样,我能够在Base Controller中获取url。但是获取的url格式不正确,它使用“%2f%f wsignin…”代替/(斜杠)和?(问号),因此操作变量无法从querystring获取操作。