繁体   English   中英

asp .net核心应用程序没有在IE和EDGE中设置响应cookie,但在firefox和chrome中运行良好

[英]asp .net core app doesn't set response cookie in IE and EDGE but works well in firefox and chrome

我有一个带有帖子操作的登录控制器,在成功登录后会重定向到主页。 我正在使用以下代码进行重定向,这在Chrome和Firefox中运行良好。 但不会在IE和EDGE中重定向,并且未设置响应cookie

private ActionResult RedirectToLocal(string returnUrl)
{
    if (Url.IsLocalUrl(returnUrl))
    {
        return Redirect(returnUrl);
    }
    else
    {
        return RedirectToRoute("default", new { controller = "", action = "" });
    }
}

我的登录操作

public IActionResult Login(string userName, string password)
{
   try
   {
       if (string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(password))
                throw new InvalidOperationException("Username/Password can not be empty");

            var session = CreateSession(userName, password);
            var returnUrl = Request.Query["returnUrl"];
            return RedirectToLocal(returnUrl);
    }
    catch (Exception ex)
    {
        ModelState.AddModelError("Login", ex.Message);
    }

        return View();
    }

我正在使用自己的会话管理,我为其设置会话cookie,如下所示

CookieOptions option = new CookieOptions();
option.Path = AppPath;
option.Domain = AppHost;             
httpContextAccessor.HttpContext.Response.Cookies.Append(AppSessionToken, "SomeSessionId", option);

经过大量搜索确切答案后,我发现Internet Explorer(所有版本)不允许您指定localhost域,本地IP地址或计算机名称。 执行此操作时,Internet Explorer只会忽略该cookie。 所以我删除了以下行

option.Domain = AppHost;

从我的代码和一切开始按预期在IE和EDGE上工作。

由于您没有从Startup.cs发布路由映射,我不确定它为什么不适合您。 也许你不应该通过将new { controller = "", action = "" }传递给RedirectToRoute()方法来覆盖controlleraction参数?

相反,您是否尝试过使用路由名称调用方法,例如

return RedirectToRoute("default");

或者,您可以使用RedirectToAction()

if (Url.IsLocalUrl(returnUrl))
{
    return Redirect(returnUrl);
}

// action, controller and route values
return RedirectToAction("index", "home", new { area = "" });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM