当我们使用Authorize属性装饰任何操作时,MVC如何重定向到登录表单,因为我的登录控制器名称可能不同,并且视图名称也可能不同。登录视图也可以存储在不同的文件夹而不是共享文件夹中。
请告诉我MVC引擎如何理解在面对Authorize属性时需要加载登录表单?
MVC引擎如何知道登录表单模板的存储位置,因为它的位置可能不同而不是共享文件夹?
如果我的登录控制器名称不同,MVC引擎将如何知道登录控制器名称是什么?
请讨论我在此详细询问的3点。感谢
答案 0 :(得分:0)
AuthorizeAttribute
是一个过滤器,这意味着它可以在关联的控制器操作之前执行。 AuthorizeAttribute
在OnAuthorization
方法中执行其主要工作。如果用户验证失败,则返回HttpUnauthorizedResult
操作结果,该结果生成HTTP 401状态代码。在以前版本的ASP.NET MVC中,用户重定向到应用程序的web.config中定义的应用程序登录页面:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
在ASP.NET MVC 5中,重定向过程由OWIN
中间件组件处理。它将未经身份验证的请求重定向到LoginPath
值
默认为“/Account/Login
”:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType =
DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login")
});