如果用户已登录并进入有效页面,则会按预期方式转到该页面。
如果用户已登录并转到无效页面,则按预期将其转到NotFound.cshtml。
如果用户未登录并进入无效页面(例如http://dev.apphost.mycompany.com/my_app_path/hgfhfhjgfhf),则按预期将其转到Unauthorized.cshtml。
如果用户未登录并进入有效页面,则希望它进入Unauthorized.cshtml。相反,当我在Firefox中尝试时,页面为空白。当我在Chrome中尝试时:
找不到此dev.apphost.mycompany.com页面
找不到该网址的网页:
http://dev.apphost.mycompany.com/my_app_path/
HTTP错误404
...为什么?
此外,此行为仅在发布后发生。从本地主机运行时,一切正常。
这是我的ErrorController:
[AllowAnonymous]
public class ErrorController : Controller
{
private readonly IActiveUserService _activeUserSrv;
public ErrorController(IActiveUserService activeUserSrv)
{
_activeUserSrv = activeUserSrv;
}
[Route("error/not-found")]
public ActionResult NotFound()
{
var currUser = _activeUserSrv.GetActiveInternalUser();
if (currUser == null)
{
return View("Unauthorized");
}
else
{
return View();
}
}
[Route("error/unauthorized")]
public ActionResult Unauthorized()
{
return View();
}
}
编辑:根据要求,我将包括登录控制器方法。它是从unauthorized.cshtml访问的(因此不被使用,因为我的问题是我无法获取到unauthorized.cshtml)。
[Authorize]
public class AccountController : Controller
{
private readonly IAccountService _accountService;
public AccountController(IAccountService srv)
{
_accountService = srv;
}
[Route("manualLogin")]
[AllowAnonymous]
public ActionResult ManualLogin(string username, string password)
{
var env = GetEnvFromHost();
return _accountService.InternalManualLogIn(username, password, env)
? (ActionResult)RedirectToAction("Index", "Home")
: new HttpStatusCodeResult(statusCode: 401);
}
...
}