asp.net 有向所有页面统一加入固定代码的方法吗?

asp.net 有向所有页面统一加入固定内容的方法吗?
HttpHandler类似于这种
但是我需要向页面固定的位置添加内容

<body>
<div class="我是指定元素">
<img src="我是新添加的固定内容" />
</div>
</body>

IIS 或者其他方法都行...

阅读 3.4k
4 个回答

利用 HttpModule解决

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;

namespace UniformCode
{
    public class SiteStatResponseFilter : AbstractHttpResponseFilter
    {
        private static readonly string END_HTML_TAG_NAME = "</body>";

        private static readonly string SCRIPT_PATH = "UniformCode.site-tongji.htm";

        private static readonly string SITE_STAT_SCRIPT_CONTENT = "";

        static SiteStatResponseFilter()
        {
//            Stream stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(SCRIPT_PATH);
//            if (stream == null)
//            {
//                throw new FileNotFoundException(string.Format("The file \"{0}\" not found in assembly", SCRIPT_PATH));
//            }
//            using (StreamReader reader = new StreamReader(stream))
//            {
            SITE_STAT_SCRIPT_CONTENT = "<img src=\"" + new UniformCode.Cs(1256249254).TrackPageView() + "\" width=\"0\" height=\"0\"/>";
//                reader.Close();
//            }
        }

       
        public SiteStatResponseFilter(Stream responseStream)
            : base(responseStream)
        {

        }


        protected override void WriteCore(byte[] buffer, int offset, int count)
        {
            string strBuffer = Encoding.UTF8.GetString(buffer, offset, count);
            strBuffer = AppendSiteStatScript(strBuffer);
            byte[] data = Encoding.UTF8.GetBytes(strBuffer);
            _responseStream.Write(data, 0, data.Length);
        }
        
        /// <summary>
        /// 附加站点统计脚本
        /// </summary>
        /// <param name="strBuffer"></param>
        /// <returns></returns>
        protected virtual string AppendSiteStatScript(string strBuffer)
        {
            if (string.IsNullOrEmpty(strBuffer))
            {
                return strBuffer;
            }
            int endHtmlTagIndex = strBuffer.IndexOf(END_HTML_TAG_NAME, StringComparison.InvariantCultureIgnoreCase);
            if (endHtmlTagIndex <= 0)
            {
                return strBuffer;
            }
            return strBuffer.Insert(endHtmlTagIndex, SITE_STAT_SCRIPT_CONTENT);
        }
    }
}

解决方法链接地址

ASP.NET WebForm 有 MasterPage,
ASP.NET MVC 的 Razor 模板有 Layout
ASP.NET Core 有中间件(但我没用过)

新手上路,请多包涵

用模板页就能解决你的问题,如果要执行特定的方法,可以用Global里面对应的方法

用模板页:
ASP.NET WebForm 有 MasterPage,
ASP.NET MVC 有 Layout

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题