zoukankan      html  css  js  c++  java
  • Asp.Net Core get client IP

    不废话,直接上代码,你懂得。

    public string GetRequestIP(bool tryUseXForwardHeader = true)
    {
        string ip = null;
    
        // todo support new "Forwarded" header (2014) https://en.wikipedia.org/wiki/X-Forwarded-For
    
        if (tryUseXForwardHeader)
            ip = GetHeaderValueAs<string>("X-Forwarded-For").SplitCsv().FirstOrDefault();
    
        // RemoteIpAddress is always null in DNX RC1 Update1 (bug).
        if (ip.IsNullOrWhitespace() && _httpContextAccessor.HttpContext?.Connection?.RemoteIpAddress != null)
            ip = _httpContextAccessor.HttpContext.Connection.RemoteIpAddress.ToString();
    
        if (ip.IsNullOrWhitespace())
            ip = GetHeaderValueAs<string>("REMOTE_ADDR");
    
        // _httpContextAccessor.HttpContext?.Request?.Host this is the local host.
    
        if (ip.IsNullOrWhitespace())
            throw new Exception("Unable to determine caller's IP.");
    
        return ip;
    }
    
    public T GetHeaderValueAs<T>(string headerName)
    {
        StringValues values;
    
        if (_httpContextAccessor.HttpContext?.Request?.Headers?.TryGetValue(headerName, out values) ?? false)
        {
            string rawValues = values.ToString();   // writes out as Csv when there are multiple.
    
            if (!rawValues.IsNullOrEmpty())
                return (T)Convert.ChangeType(values.ToString(), typeof(T));
        }
        return default(T);
    }
    
    public static List<string> SplitCsv(this string csvList, bool nullOrWhitespaceInputReturnsNull = false)
    {
        if (string.IsNullOrWhiteSpace(csvList))
            return nullOrWhitespaceInputReturnsNull ? null : new List<string>();
    
        return csvList
            .TrimEnd(',')
            .Split(',')
            .AsEnumerable<string>()
            .Select(s => s.Trim())
            .ToList();
    }
    
    public static bool IsNullOrWhitespace(this string s)
    {
        return String.IsNullOrWhiteSpace(s);
    }
  • 相关阅读:
    网页居中的问题
    棋盘覆盖
    可变宽度的圆角框
    多线程编辑问题
    实验五 Web项目开发
    实验三 一个标准的Windows应用程序
    【语言处理与Python】1.2将文本当作词链表
    【语言处理与Python】1.5自动理解自然语言
    【语言处理与Python】1.1文本和单词
    【语言处理与Python】1.3计算语言:简单的统计
  • 原文地址:https://www.cnblogs.com/Javi/p/6514249.html
Copyright © 2011-2022 走看看