Microsoft.AspNetCore.Mvc请求处理示例

{
    /// <summary>
    /// 功能说明:API处理工具。
    /// </summary>
    public class MyController : ControllerBase
    {
        private static object initlock = new object();


        /// <summary>
        /// Jsonp格式化工具。
        /// </summary>
        /// <typeparam name="T">返回类型。</typeparam>
        /// <param name="returnObj">返回值。</param>
        /// <returns>处理后的数据。</returns>
        [NonAction]
        protected IActionResult FormatJsonP<T>(T returnObj)
        {
            var returnMsg = JsonConvert.SerializeObject(returnObj);

            var callback = GetRequestString("callback");

            if (HttpContext.Request.Method != "GET" || string.IsNullOrEmpty(callback))
                return new JsonResult(returnObj);

            if (!string.IsNullOrEmpty(callback))
            {
                returnMsg = $"{callback}({returnMsg})";
            }
            return Content(returnMsg, "text/plain");
        }

        /// <summary>
        /// 获取String类型的值。
        /// </summary>
        /// <param name="name">参数名。</param>
        /// <returns>参数值。</returns>
        [NonAction]
        protected string GetRequestString(string name)
        {
            try
            {
                if (HttpContext.Request.HasFormContentType && HttpContext.Request.Form.ContainsKey(name))
                    return HttpContext.Request.Form[name];
                return HttpContext.Request.Query[name];
            }
            catch (Exception ex)
            {
                LogWriter.WriteError("EMController.GetRequestString", string.Empty, ex);
            }
            return string.Empty;
        }

        /// <summary>
        /// 获取Stream流中字符。
        /// </summary>
        /// <returns>值。</returns>
        [NonAction]
        protected string GetRequestBody()
        {
            try
            {
                using (StreamReader stream = new StreamReader(HttpContext.Request.Body))
                {
                    string body = stream.ReadToEndAsync().GetAwaiter().GetResult();
                    return body;
                }
            }
            catch (Exception ex)
            {
                LogWriter.WriteError("EMController.GetRequestBody", string.Empty, ex);
            }
            return string.Empty;
        }

        /// <summary>
        /// 获取cookie 的名称
        /// </summary>
        /// <param name="cookieName">cooke键。</param>
        /// <returns>值。</returns>
        [NonAction]
        protected string GetRequestCookie(string cookieName)
        {
            if (HttpContext.Request.Cookies[cookieName] != null)
            {
                return HttpContext.Request.Cookies[cookieName];
            }
            return string.Empty;
        }

        /// <summary>
        /// 获取请求IP。
        /// </summary>
        /// <returns>请求IP。</returns>
        [NonAction]
        protected string GetRequestIP()
        {
            if (HttpContext.Request != null)
            {
                if (HttpContext.GetServerVariable("HTTP_VIA") == null)//未使用代理
                {
                    return HttpContext.Connection.RemoteIpAddress.ToString();
                }
                else//使用代理服务器
                {
                    return HttpContext.GetServerVariable("HTTP_X_FORWARDED_FOR");
                }
            }
            return string.Empty;
        }
    }
}
posted @ 2025-05-12 09:04  破落户儿  阅读(12)  评论(0)    收藏  举报