![](/img/trans.png)
[英]Sending a memory file to the client browser via asp.net works on Edge, IE, and Firefox but not 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()
方法来覆盖controller
和action
参数?
相反,您是否尝试过使用路由名称调用方法,例如
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.