2020.10.22-MVC5 filtro (autenticación de autoridad) y problemas relacionados con la casilla de verificación

1. Valor de transferencia de la casilla de verificación: obtenga los datos del artículo seleccionados por el usuario a través del valor del atributo Nombre, y se serializarán en una matriz y se pasarán
Inserte la descripción de la imagen aquí
Código de fondo:
Inserte la descripción de la imagen aquí


Dos, AuthorizeAttribute de verificación de permisos MVC5

using Microsoft.Ajax.Utilities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Helpers;
using System.Web.Management;
using System.Web.Mvc;

namespace RM_MVC._2020._10._21.Models
{
    
    
    /// <summary>
    /// 指定空明知其或Action的访问只限于满足授权的用户
    /// </summary>
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
    public class UserInfoAuthorizationAttribute : AuthorizeAttribute
    {
    
    
        public string loginUri {
    
     get; set; }
        //不同项目的登录Action 可能不一样 
        public UserInfoAuthorizationAttribute(string loginUrl = "~/UserInfo/Index")
        {
    
    
            this.loginUri = loginUrl;
        }
        /// <summary>
        /// 认证校验
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
    
    


            //判断是否跳过授权过滤器
            if (filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true)
                || filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true))
            {
    
    
                return;
            }
            else
            {
    
    
                if (filterContext.HttpContext.Session["CurrentUseInfo"] == null || !(filterContext.HttpContext.Session["CurrentUseInfo"] is Userinfo))
                {
    
    
                    //如果是Ajax请求 返回Json数据
                    if (filterContext.HttpContext.Request.IsAjaxRequest())
                    {
    
    
                        //filterContext.Result = new ContentResult() { Content = "NO-请登录" };
                        //返回son字符串
                        filterContext.Result = new JsonResult() {
    
     JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = new {
    
     msg = "请登录", code = 0 } };
                    }

                    //记住用户请求的URL,登陆成功以后自动跳转至该页面
                    filterContext.HttpContext.Session["FirstUrl"] = filterContext.HttpContext.Request.Url.AbsoluteUri;

                    //如果不是Ajax,就直接获取或设置由Action返回的结果(跳转页面)
                    filterContext.Result = new RedirectResult(this.loginUri);

                }
                else
                {
    
    
                    //已有登录 略过不处理(日志。。)
                    return;
                }
            }

            //base.OnAuthorization(filterContext);
        }
    }
}

Uso: acción de clase Global:
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
1. El controlador de inicio de sesión (inicio de sesión) o la acción no requiere autenticación, utilice la función AllowAnonymous para ignorar la autenticación
Inserte la descripción de la imagen aquí
2. No es suficiente marcar la etiqueta de la función, debe agregar juicio cuando se autentica.
Inserte la descripción de la imagen aquí
3. De esta forma, el usuario no provocará un bucle sin fin (redirección infinita) al solicitar la página de inicio de sesión,
Inserte la descripción de la imagen aquí


Tres, filtro global personalizado de error:
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Uso: acción de clase global:
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
△: ¿Qué información de excepción puede capturar el controlador de excepciones personalizado?

1. La acción es anormal y no se
detecta 2. La acción llama a la excepción del servicio Servicec (transferencia de lanzamiento anormal)
3. La acción es normal, la vista de vista es anormal
4. La verificación de permisos es anormal (autorización)

△: ¿Qué información de excepciones no puede capturar el controlador de excepciones personalizado?

1. No se puede capturar la excepción del constructor del controlador. (El filtro solo está disponible después de que se construye el controlador)
2. Error de nombre al acceder a la Acción (relacionado con la Ruta, no relacionado con el controlador MVC)

△: ¿Cómo solucionar estos peces perdidos? ¿Para lograr una combinación que pueda capturar completamente las excepciones?
Registre el evento Application_Error () en la función de evento de manejo de excepciones globales de archivos globalesInserte la descripción de la imagen aquí


Cuatro, filtro de acción:
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Extensión: los filtros de acción también se pueden implementar usando la clase base Controller
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí


Cinco, filtro (orden de ejecución) y método de cambio

Si se aplica una acción con filtrado de acciones, filtrado de clases y filtrado global al mismo tiempo, el
orden de ejecución predeterminado es de afuera hacia adentro -> de adentro hacia afuera.
Cambie el orden ----> Use cuanto mayor sea el valor del atributo de orden para activar el evento de filtrado primero

[ActionFilterAttribute(order = 15 )]
[ControllerFilterAttribute(order = 50 )]
[OverallFilterAttribute(order = 5 )]


Seis, Acción (orden de ejecución) imagen de captura anormal
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/MrLsss/article/details/109218050
Recomendado
Clasificación