ASP.NET MVC BaseController

我们在写asp.net mvc 时 权限认证一般我们写在一个BaseController里面 然后每个控制器继承这个就实现权限控制了 ,这里面的实现是AOP思想 还有 网站不能用GET 请求 必须要用POST ,对结果集进行统一处理 等 都可以在这里完成
下面 我自己写了一个 在这里分享一下

/**
 * Time:2019-09-11
 * Description:系统基本控制器所有控制器都要继承这个基本控制器
 * 
 */
namespace TradingSystemDbFileTransfer.Controllers
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using TradingSystemDbFileTransfer.Models.ResultModel;
    using Newtonsoft.Json;
    using System.Text;
    /// 
    /// 基本控制器
    /// 
    public class BaseController : Controller
    {

        /// 
        /// 执行Action之前就行请求拦截判断请求是否是Ajax请求
        /// 
        /// action拦截器上下文
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            //先判断Action方法上有没有匿名特性
            bool isContainsAttribute=filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute),true);
            //判断Action是否包含匿名特性
            if (isContainsAttribute)
            {
                //如果包含可以不是Ajax请求
                return;
            }
            else {
                //判断请求是否是Ajax请求
                bool isAjaxRequest = AjaxRequestExtensions.IsAjaxRequest(filterContext.HttpContext.Request);
                if (isAjaxRequest)
                {
                    //说明是Ajax请求
                    //判断Action方法上有没有HttPpost特性
                    bool isHttpPostAttribute = filterContext.ActionDescriptor.IsDefined(typeof(HttpPostAttribute), true);
                    if (isHttpPostAttribute)
                    {
                        return;
                    }
                    else {
                        //如果不包含HttPpost特性 说明不是post请求  一律不允许  并设置重定向参数让前端跳转
                        filterContext.HttpContext.Response.Headers["enableRedirect"] = "true";
                        filterContext.HttpContext.Response.Headers["redirectUrl"] = "/ErrorPage/IsPostRequest.html";
                        filterContext.HttpContext.Response.End();
                    }
                }
                else {
                    //如果不是Ajax请求一律不允许(有标记匿名特性的除外)
                    filterContext.Result = Redirect("~/ErrorPage/IsAjaxRequest.html");
                }

            }

        }

        /// 
        /// 统一Action方法返回结果序列化处理
        /// 
        /// 
        protected override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            //先判断Action方法上有没有匿名特性
            bool isContainsAttribute = filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true);
            if (isContainsAttribute)
            {
                return;
            }
            else {
                if (filterContext.Exception == null)
                {
                    if (filterContext.Result != null)
                    {
                        ContentResult result = new ContentResult();
                        result.ContentEncoding = Encoding.UTF8;
                        ContentResult content = null;
                        if (filterContext.Result != null) {
                            content = filterContext.Result as ContentResult;
                        }
                        if (content != null && content.Content != null)
                        {
                            //重新封装返回结果
                            ResponceResultFormat format = new ResponceResultFormat()
                            {
                                Message = content.Content,
                            };
                            content.Content = JsonConvert.SerializeObject(format);
                        }
                        filterContext.Result = content;
                    }
                }
            }
        }
    }
}

这个基本控制器没有做权限的处理 最近在写一个程序 把数据库文件移动到磁盘 和权限没有关系就没写这一块内容

分享下我写的程序的截图
ASP.NET MVC BaseController_第1张图片

你可能感兴趣的:(C#,.net,ASP.NET,MVC)