使用浏览器和.net MVC的Flex应用程序RedirectToAction == BadRequest

时间:2011-03-23 16:56:19

标签: .net asp.net-mvc flex air

我有一个带有HTML浏览器的flex应用程序。

每当我尝试登录我的.net 4 MVC 3应用程序时,我都会被重定向到这样的URL:

http://dev.example.com/(F(pvQgwsX3QvLrI1tN0JENknfz27yN7H00FCaLw_N06qL_SvBGmbS9Mc8V9BIlergVUhGiLeg-JU5HnEE-fzXtWqtVq-S5Pk393AXbifUTmcH29sDF9e028kpbYbX8L-VOY75QXYzXHTDfb06ozuOJzPvPB-y8atHn2B3BoDyiZMBd3DCjdO4meTwp9kvNY6ZarXbFByTU932Hu95lRcTq6yJzQ8y5Ree28nqgjqVHKEV77noegweTKkZ0_5IUZYnE0))/someDirectory

这只发生在Flex浏览器(Adobe Air 2.6)中。使用常规互联网浏览器登录是可以的。

登录代码如下:

    [HttpPost]
    [ActionName("sign-in")]
    public ActionResult Signin(SignInModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            if (MembershipService.ValidateUser(model.Email, model.Password))
            {
                FormsService.SignIn(model.Email, model.RememberMe);
                if (Url.IsLocalUrl(returnUrl) && false)
                {
                    return Redirect(returnUrl);
                }
                else
                {
                    return RedirectToAction("Index", "admin");
                }
            }
            else
            {
                ModelState.AddModelError("", "The user name or password provided is incorrect.");
            }
        }

        // If we got this far, something failed, redisplay form
        return View("signin", model);
    }

知道那个网址是什么以及如何让它工作?

2 个答案:

答案 0 :(得分:2)

我只是随心所欲地决定将flex浏览器的用户代理更改为Chrome和中提琴使用的用户代理! - 它有效。

显然.net或MVC 3不喜欢flex的userAgent字符串,并决定删除网址。它可能试图设置无cookie会话或其他东西(我的应用程序没有设置)。

所以这是我新的,有效的用户代理字符串:

Mozilla/5.0 (Windows NT 5.1) AppleWebKit/531.9 (KHTML, like Gecko) Chrome/11.0.696.16 Safari/534.24

答案 1 :(得分:1)

当浏览器不支持cookie或已关闭cookie时,ASP.NET会使用此URL。它不是ASP.NET MVC特有的。由于没有cookie,因此会在URL中发送身份验证令牌,以便跟踪已登录的用户。