C# HttpContext

1>HttpContext 是什么?

在用.NET构建的服务器中,当有用户通过get/post方式提交Http请求时.我们就使用 HttpContext 对用户的请求进行处理.

2>HttpContext.Current的实质?

System.Runtime.Remoting.Messaging.CallContext.HostContext as HttpContext;(获取或设置与当前线程相关联的主机上下文。)

关键字 关联当前线程 

当用户提交http请求,.NET会专门申请一个线程来处理这个请求 . 也就是在这个线程所执行到的程序中  .Current 都会返回相同的主机上下文.

ps:如果存在,不在当前线程的代码块.Current无法找到匹配的上下文.

1. 定时器的回调。
2. Cache的移除通知。
3. APM模式下异步完成回调。
4. 主动创建线程或者将任务交给线程池来执行。

这几种情况都会脱离http请求处理的线程,导致..Current 的返回值 为null

如果必须使用异步方法脱离线程,有保证HttpContext 的有效性,可以将HttpContext 以参数的形式传入.

3>HttpContext 怎样切入?

利用.NET建立 XXX.ashx文件  public void ProcessRequest (HttpContext context) 

在函数体中就可以利用 HttpContext 处理 用户的请求

4>HttpContext 能做些什么?

--1.(HttpRequest )request 请求

  •  UserHostAddress 客户端主机的IP地址  x.x.x.x:x
  • Url 请求服务器完整链接地址 x.x.x.x:x/a/b.ashx
  • Url .Authority 主机端口 x.x.x.x:x
  • Url .Host 主机 x.x.x.x
  • Url .Port 端口 x.x.x.x
  • PhysicalApplicationPath  请求服务器文件目录 D:/c/a/b/.ashx
  • Path 相对路径 /a/b.ashx

--2..HttpRequest .(NameValueCollection)Params 请求参数

  •  Get();获取指定名称的参数 get/post

--3..HttpRequest .(HttpFileCollection)Files 请求文件集合 .[index] HttpPostedFile 文件

  • HttpPostedFile.ContentLength 文件大小
  • HttpPostedFile.ContentType 文件类型
  • HttpPostedFile.FileName 文件名
  • HttpPostedFile.InputStream 文件数据流
  • HttpPostedFile SaveAs(string filename) 保存方法

--4.(HttpResponse)  Response 处理请求

  • Redirect(string url) 通知客户端,跳转请求链接 以http://开头,为完全使用一个新的地址链接,否则视为使用行对路径
  • Write(string str) 以字符串的形式返回数据
  • WriteFile(string fileName) 以文件数据的形式返回数据
  • 以上都是.NET封装好的易用方法,如果需要定制需求可以根据HttpResponse流属性和方法,生成更加具体的返回结果

--5(HttpServerUtility) Server服务器端处理

  • MachineName 服务器主机名
  • MapPath(string path) 将可识别路径转变为服务器的物理路径(常用)
  • Execute(string path) 执行path对应路径下的文件,执行外返回调用出
  • Transfer(string path) 跳转路径,不通知客户端
  • UrlEncode,UrlDecode,HtmlEncode,HtmlDecode 对字符串进行转码,解码的工具方法

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用以下代码将多个 DataTable 导出到一个 Excel 文件的多个 sheet 中: ```csharp protected void ExportToExcel(List<DataTable> tables, string fileName) { // 创建一个新的工作簿 var workbook = new XSSFWorkbook(); // 循环创建每个表格的 sheet for (int i = 0; i < tables.Count; i++) { // 创建一个新的 sheet var sheet = workbook.CreateSheet("Sheet" + (i + 1)); // 填充表头 var headerRow = sheet.CreateRow(0); for (int j = 0; j < tables[i].Columns.Count; j++) { headerRow.CreateCell(j).SetCellValue(tables[i].Columns[j].ColumnName); } // 填充数据到 sheet 中 for (int row = 0; row < tables[i].Rows.Count; row++) { var dataRow = sheet.CreateRow(row + 1); for (int col = 0; col < tables[i].Columns.Count; col++) { dataRow.CreateCell(col).SetCellValue(tables[i].Rows[row][col].ToString()); } } } // 写入到 HttpContext 中 var ms = new MemoryStream(); workbook.Write(ms); HttpContext.Current.Response.Clear(); HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName); HttpContext.Current.Response.BinaryWrite(ms.ToArray()); HttpContext.Current.Response.End(); } ``` 使用方法示例: ```csharp List<DataTable> tables = new List<DataTable>(); tables.Add(GetDataTable1()); tables.Add(GetDataTable2()); ExportToExcel(tables, "test.xlsx"); ``` 其中,`GetDataTable1()` 和 `GetDataTable2()` 分别是获取需要导出的两个 DataTable 的方法,`"test.xlsx"` 是导出的 Excel 文件的文件名。导出的文件会自动下载到客户端计算机。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值