c# asp.net mvc API接口安全过滤,api域名过滤,api域名+端口过滤

背景

我的项目设置了IIS的请求头允许所有域名都可以跨域访问我的API;

但是我又想通过程序控制某些域名不能访问

Web.config代码

节点下   节点

    
     
       
      
      
      

     
    

 延伸阅读:

ASP.NET MVC和ASP.NET Web API跨域请求问题解决方案【最全】

https://blog.csdn.net/cplvfx/article/details/108314665

 

第一步:Web.config 修改

在网站根目录打开“Web.config”文件找到节点,

如果没有,就在节点下加上节点,

下面是完整代码

  
    
    
  

第二步:新增检查类

APICheckDomainName.cs代码

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Net.Http;
using System.Web;

namespace API
{
    /// 
    /// 检查请求API的域名是否授权,可以检测“域名”或“域名+端口”是否授权
    /// 
    public class APICheckDomainName
    {

  
        /// 
        /// 检查请求的域名是否授权
        /// 
        /// 当前请求
        /// 是否检测端口,如果检测端口,配置文件的域名也必须附带端口号,如http://www.baidu.com:80/
        /// 如果未授权返回false,否则true
        public static bool CheckDomainName(HttpRequestMessage Request,bool PortCheck=false)
        {
            //RequestStatus
            bool RequestStatus = false;

            string RequestDomainName= string.Empty;

            //获取配置
            string[] APICheckDomainNameList = ConfigurationManager.AppSettings["APICheckDomainName"].ToString().Split(',');
       
            //协议 http/htts
            string scheme = string.Empty;

            //域名
            string host = string.Empty;

            //端口
            int Port= 0;


            try
            {
                //获取请求的Scheme
                scheme = Request.Headers.Referrer.Scheme;
            }
            catch (Exception)
            {
                //获取直接访问的Scheme
                scheme = Request.RequestUri.Scheme;
            }

            try
            {
                //获取请求的Host
                host = Request.Headers.Referrer.Host;
            }
            catch (Exception)
            {
                //获取直接访问的Host
                host = Request.RequestUri.Host;
            }

            try
            {
                //获取请求的Port
                Port = Request.Headers.Referrer.Port;
            }
            catch (Exception)
            {
                //获取直接访问的Port
                Port = Request.RequestUri.Port;
            }


            if (PortCheck)
            {
                 RequestDomainName = $"{scheme}://{host}:{Port}/";
            }
            else {
                 RequestDomainName = $"{scheme}://{host}/";
            }

           
        
            foreach (var item in APICheckDomainNameList)
            {
                if (item == RequestDomainName)
                {
                    RequestStatus = true;
                }
            }
            return RequestStatus;
        }

    }
}

 

第三步:调用

   //检查是否授权
  if (APICheckDomainName.CheckDomainName(Request)==false)
  {
     return "未授权!";
  }

 

 

 

 

 

 

你可能感兴趣的:(c#,asp.net,mvc,asp.net)