hyr*_*o78 2 asp.net asp.net-mvc-3
我有一个非常愚蠢的问题,但无论如何我都会有.
这是我的控制器中用于登录的代码
[HttpPost]
public ActionResult Index(LogonModel model, string ReturnUrl)
{
ReturnUrl = Request.QueryString["ReturnUrl"];
if (ModelState.IsValid)
{
if (UserRepository.validLogin(model.Username, model.Password))
{
UserLogRepository.createLogEntry("Log On", " has logged on to the Staff Portal.", "Entry/Exit");
if (ReturnUrl.Length > 1)
{
return Redirect(Request.QueryString["ReturnUrl"]);
}
else
{
return RedirectToAction("Dashboard", "Home");
}
}
else
{
ModelState.AddModelError("", Session["Error"].ToString());
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的那样,我只是在检查返回器是否具有用于测试目的的长度之后再将其锁定更多.我的问题是我得到一个"对象引用未设置为对象的实例".指向这一行"if(ReturnUrl.Length> 1)"
现在,当用户从网站超时时我所拥有的URL是: http:// localhost/Dispatch2012/Staff/Home?ReturnUrl = Dispatch2012%2FStaff%2FCredential
正如您所看到的,这是MVC 3创建的标准重定向,我尝试将ReturnUrl作为标准查询字符串读取,但每次都表示该对象不存在.我错过了什么?
控制器的设置方式对我来说很奇怪,但让我们深入研究它:
[HttpPost]
public ActionResult Index(LogonModel model, string returnUrl) //changed
{
ReturnUrl = returnUrl; //changed
if (ModelState.IsValid)
{
if (UserRepository.validLogin(model.Username, model.Password))
{
UserLogRepository.createLogEntry("Log On", string.Format("{0} has logged on to the Staff Portal.", model.Username, "Entry/Exit"); //changed
if (ReturnUrl.Length > 1) //this should use IsLocalUrl
{
return Redirect(Request.QueryString["ReturnUrl"]);
}
else
{
return RedirectToAction("Dashboard", "Home");
}
}
else
{
ModelState.AddModelError("", Session["Error"].ToString());
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
一些东西:
您returnUrl需要进行检查以确保它是本地URL.有很多方法可以做到这一点,因为你使用的是ASP.NET MVC 3,它是内置的.
你为什么要把退出的ReturnUrl从查询字符串中拉出来(如果你已经正确设置了你的视图),它已经被传入了?
你认为你有以下几点吗?
<%= Html.Hidden("returnUrl", Url.Encode(Url.Action("ActionToRedirectTo", "ControllerName", new { id = Model.Whatever}))) %>
Run Code Online (Sandbox Code Playgroud)
如果是这样,当它发布时,它将自动Index作为returnUrl参数发送到Action .
我打赌因为它不起作用,你实际上并没有正确地发回ReturnUrl,检查我对视图的看法.哦,并确保你的URL编码ReturnUrl.
此外,由于它是a HttpPost,查询字符串将不会返回Url.
| 归档时间: |
|
| 查看次数: |
2776 次 |
| 最近记录: |