asp.net 中 request 与 context.request有啥区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp.net 中 request 与 context.request有啥区别?相关的知识,希望对你有一定的参考价值。

看了MSDN这一段不太明白:

Request 属性提供对 HttpRequest 类的属性和方法的编程访问。由于 ASP.NET 页包含对 System.Web 命名空间(含有 HttpContext 类)的默认引用,因此在 .aspx 页上可以引用 HttpContext 的成员,而不需要对 HttpContext 的完全限定类引用。例如,可只使用 Request.Browser 获取客户端浏览器的功能。但是,如果要从 ASP.NET 代码隐藏模块中使用 HttpRequest 的成员,则必须在该模块中包括对 System.Web 命名空间的引用,同时还要完全限定对当前活动的请求/响应上下文以及要使用的 System.Web 中的类的引用。例如,在代码隐藏页中,必须指定全名 HttpContext.Current.Request.Browser。

asp.net 中 request 与 context.request有什么区别吗?
?????????????????????????????????????????

request 与 context.request 没有区别
Page 页中 实际上也是用到 System.Web.HttpContext.Current.Request
他调用的函数是:
public HttpRequest Request getreturn System.Web.HttpContext.Current.Request;

只要在同一个网站中 他们两获取的值都是一样的
放心使用吧
参考技术A context是一个请求实例。报含了这个请求的一些信息。比如参数,访问客户的ip地址等等。
每个page页面实际是继承了context。你可以在.cs中写this.Page.Request.调试看看就明白了
参考技术B 1

ASP.NET CORE 中的 Request.Files

【中文标题】ASP.NET CORE 中的 Request.Files【英文标题】:Request.Files in ASP.NET CORE 【发布时间】:2016-08-08 07:02:21 【问题描述】:

我正在尝试使用 ajax 请求使用 aspnet 核心上传文件。 在以前的 .net 版本中,我曾经使用

来处理这个问题
 foreach (string fileName in Request.Files)
            
                HttpPostedFileBase file = Request.Files[fileName];
                //Save file content goes here

                fName = file.FileName;
     (...)

但现在它在 request.files 处显示错误我怎样才能让它工作?我搜了一下发现httppostedfile已经改成了iformfile但是request.files怎么处理呢?

【问题讨论】:

看看这些链接***.com/questions/26443305/…和***.com/questions/29836342/mvc-6-httppostedfilebase尤其是这个答案***.com/a/27980038/5426333 感谢您的评论,我实际上发现IFormFile file in Request.Form.Files 现在我被困在获取参数值 Request.Form.Files[fileName] ? 【参考方案1】:

这是来自最近项目的工作代码。数据已从 Request.Files 移至 Request.Form.Files。 如果您需要将流转换为字节数组 - 这是唯一对我有用的实现。其他人会返回空数组。

using System.IO;
var filePath = Path.GetTempFileName();
foreach (var formFile in Request.Form.Files)

   if (formFile.Length > 0)
   
      using (var inputStream = new FileStream(filePath, FileMode.Create))
      
         // read file to stream
         await formFile.CopyToAsync(inputStream);
         // stream to byte array
         byte[] array = new byte[inputStream.Length];
         inputStream.Seek(0, SeekOrigin.Begin);
         inputStream.Read(array, 0, array.Length);
         // get file name
         string fName = formFile.FileName;
      
   

【讨论】:

【参考方案2】:

我想到的两个好的解决方案如何合并:

var myBytes  = await GetByteArrayFromImageAsync(Request.Form.Files[0]); 

private async Task<byte[]> GetByteArrayFromImageAsync(IFormFile file)

  using (var target = new MemoryStream())
  
    await file.CopyToAsync(target);
    return target.ToArray();
  

【讨论】:

【参考方案3】:

对于使用常规格式或 ajax 上传的两个文件,此代码 100% 有效:

[HttpPost]
public async Task<IActionResult> Upload(IList<IFormFile> files)

  foreach (IFormFile source in files)
  
    string filename = ContentDispositionHeaderValue.Parse(source.ContentDisposition).FileName.Trim('"');

    filename = this.EnsureCorrectFilename(filename);

    using (FileStream output = System.IO.File.Create(this.GetPathAndFilename(filename)))
      await source.CopyToAsync(output);
  

  return this.RedirectToAction("Index");


private string EnsureCorrectFilename(string filename)

  if (filename.Contains("\\"))
    filename = filename.Substring(filename.LastIndexOf("\\") + 1);

  return filename;


private string GetPathAndFilename(string filename)

  return this.HostingEnvironment.WebRootPath + "\\files\\" + filename;

【讨论】:

以上是关于asp.net 中 request 与 context.request有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Asp.net中Request.Url的各个属性对应的意义介绍

Asp.net环境中的跨站脚本攻击环境搭建与试验

ASP.NET 核心中的 Request.CreateResponse

Asp.net中Request.Url的各个属性对应的意义介绍

ASP.NET CORE 中的 Request.Files

asp.net MVC 路由