【发布时间】:2017-01-03 19:53:47
【问题描述】:
在实现this useful response 并将我的Login 视图移动到Shared 视图文件夹后,当我从另一个控制器调用它时,它没有被初始化。
我的电话号码:
[HttpGet]
public IActionResult AddressCorrectionList()
{
if (ValidateSecurityToken()) // ensures the app server thinks we're still logged in
{
[deleted for clarity]
return View(model);
}
else
{
return View("Login", new LoginViewModel { ReturnUrl = "/Report/AddressCorrectionList" });
}
}
AccountController 中的操作被调用:
[ActionName("Login"), HttpGet]
[AllowAnonymous]
public IActionResult LoginGet(LoginViewModel model)
{
ViewData["ReturnUrl"] = model.ReturnUrl; // I set a breakpoint here.
if (model.ReturnUrl != null)
{
model.InfoMessage = "Please login to access " + ResourceNameFor(model.ReturnUrl);
}
ModelState.Clear();
return View(model);
}
如果我直接点击登录页面的链接,它就可以正常工作。我在LoginGet 中的断点被调用。
如果我尝试点击需要登录但我没有登录的页面的链接,它可以正常工作。我被正确地重定向到登录页面。我在LoginGet 中的断点被调用。
当我从另一个控制器(例如从两个代码 sn-ps 中的第一个)调用 View 时,就会出现问题。显示登录页面,但是我的LoginGet 断点没有被调用,我的ReturnUrl 没有设置。
ValidateSecurityToken 存在是因为尽管应用程序可能认为用户已登录,但我进行 API 调用的单独应用服务器可能会由于其自身的超时规则而将用户注销。
如何修复来自AddressCorrectionList 的呼叫,以便正确初始化视图?
【问题讨论】:
-
也许一些清晰会有所帮助。那么,您是否将共享登录视图称为父视图的部分视图?如果没有,你是如何渲染的?
-
这不是局部视图。它只是一个“正常”的
.cshtml视图,它曾经存在于Views/Account目录中,并且可能在_Layout.cshtml的RenderBody()调用中呈现。 (我觉得我错过了你想问我的本质。)
标签: c# asp.net authentication asp.net-core