/// <summary>
/// Copies all headers and content (except the URL) from an incoming to an outgoing
/// request.
/// </summary>
/// <param name="source">The request to copy from</param>
/// <param name="destination">The request to copy to</param>
public static void CopyTo(this System.Web.HttpRequestBase source, HttpWebRequest destination)
{
Contract.Requires(source != null && destination != null); //注意:HttpWebRequire.Method默认为Get,
//在写入请求前必须把HttpWebRequire.Method设置为Post,
//否则在使用BeginGetRequireStream获取请求数据流的时候,系统就会发出“无法发送具有此谓词类型的内容正文”的异常。
destination.Method = source.HttpMethod; // Copy unrestricted headers (including cookies, if any)
foreach (var headerKey in source.Headers.AllKeys)
{
switch (headerKey)
{
case "Connection":
case "Content-Length":
case "Date":
case "Expect":
case "Host":
case "If-Modified-Since":
case "Range":
case "Transfer-Encoding":
case "Proxy-Connection":
// Let IIS handle these
break; case "Accept":
case "Content-Type":
case "Referer":
case "User-Agent":
// Restricted - copied below
break; default:
destination.Headers[headerKey] = source.Headers[headerKey];
break;
}
} // Copy restricted headers
if (!source.AcceptTypes.IsNullOrEmpty())
{
destination.Accept = string.Join(",", source.AcceptTypes);
}
destination.ContentType = source.ContentType;
if (source.UrlReferrer != null)
{
destination.Referer = source.UrlReferrer.AbsoluteUri;
}
destination.UserAgent = source.UserAgent;
destination.ContentLength = source.ContentLength;
destination.ContentType = source.ContentType;
destination.KeepAlive = source.Headers["Connection"] != "close";
DateTime ifModifiedSince;
if (DateTime.TryParse(source.Headers["If-Modified-Since"], out ifModifiedSince))
{
destination.IfModifiedSince = ifModifiedSince;
}
string transferEncoding = source.Headers["Transfer-Encoding"];
if (transferEncoding != null)
{
destination.SendChunked = true;
destination.TransferEncoding = transferEncoding;
} // Copy content (if content body is allowed)
if (source.HttpMethod != WebRequestMethods.Http.Get && source.HttpMethod != WebRequestMethods.Http.Head && source.ContentLength > )
{
var destinationStream = destination.GetRequestStream();
source.InputStream.FixedCopyTo(destinationStream, source.ContentLength);
destinationStream.Close();
}
}

System.Web.HttpRequestBase转HttpWebRequest的更多相关文章

  1. VB.NET中网络编程的另一种方案----system.net中的HttpWebRequest类的使用

    VB.NET中网络编程的另一种方案---- system.net中的HttpWebRequest类的使用 在VB.net中进行网络编程,除了我之前写的随笔中的使用WinHttp组件进行编程,还有另一种 ...

  2. System.Web.Mvc.Controller.cs

    ylbtech-System.Web.Mvc.Controller.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicK ...

  3. 错误 1 类型“System.Web.Mvc.ModelClientValidationRule”同时存在于“c:\Progra

    问题如图: 解决办法: step1: 首先关闭你应用程序方案,在你保存项目的文件夹下找到ProjectName.csproj  ProjectName是你实际的应用程序名称. step2: 用文字编辑 ...

  4. 未能加载文件或程序集“System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。系统找不到指定的文件

    ASP.NET 运行时错误:针对类型System.Web.Mvc.PreApplicationStartCode的应用程序邓启动初始化方法Start 引发了异常,显示下列错误消息: 未能加载文件或程序 ...

  5. Could not load type 'System.Web.Mvc.ViewPage<dynamic>' in asp.net mvc2 after publishing the website

    在WebConfig里 找到 <pages></pages> <pages pageParserFilterType="System.Web.Mvc.ViewT ...

  6. System.Web.Http.Cors配置跨域访问的两种方式

    System.Web.Http.Cors配置跨域访问的两种方式 使用System.Web.Http.Cors配置跨域访问,众多大神已经发布了很多文章,我就不在详细描述了,作为小白我只说一下自己的使用心 ...

  7. System.Web.HttpRequestValidationException: A potentially dangerous Request.F

    ASP.NET .0验证请求 System.Web.HttpRequestValidationException: A potentially dangerous Request.F System.W ...

  8. MVC-命名空间“System.Web.Mvc”中不存在类型或命名空间名称“Html”(是否缺少程序集引用?)

    如上截图,明明引用了“System.web.mvc”,可是还出这样的错误. 解决方法: 1.右键引用的“System.Web.Mvc” 2.<复制本地>一样选择<True> 3 ...

  9. 如何解决System.Web.HttpRequestValidationException的异常

    在.net framework 4.0版本以下, 只需要在web.config中进行如下配置: <configuration>    <system.web>        & ...

随机推荐

  1. opencl 学习资源

    1.AMD  opencl-optimization-guide http://developer.amd.com/tools-and-sdks/opencl-zone/amd-accelerated ...

  2. vim 学习记录

    VIM中PHP代码使用tab键自动完成 更新于 2013-01-18 05:47:55UEANER 目录结构 $ tree -C ~/.vim | grep -v ".cnx" | ...

  3. 使用ICMP协议Ping网络主机

    #coding:utf-8 #!/usr/bin/env python import os import argparse import socket import struct import sel ...

  4. APMServ本地搭建网站最好用的软件

    APMServ 5.2.6 是一款拥有图形界面的快速搭建Apache 2.2.9.PHP 5.2.6.MySQL 5.1.28&4.0.26.Nginx 0.7.19.Memcached 1. ...

  5. ogre入门笔记

    ogre作为一款开源的非商业渲染引擎, 除去效率不谈, 其设计结构十分优雅, 值得游戏从业者拥有和学习.本篇笔记基于ogre v1.9. 1.代码模块 ogre的核心代码分布如下图: ogreMain ...

  6. 【bzoj1053】反素数

    [bzoj1053]反素数 题意 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例 ...

  7. screenX clientX pageX的区别

    screenX:鼠标位置相对于用户屏幕水平偏移量,而screenY也就是垂直方向的,此时的参照点也就是原点是屏幕的左上角. clientX:跟screenX相比就是将参照点改成了浏览器内容区域的左上角 ...

  8. robotframework笔记26

    测试数据文档工具(Testdoc) Testdoc是机器人框架内置的工具生成高水平 根据测试用例文档. 创建的文档是在HTML中 格式和它包括名称.文档和其他元数据 测试套件和测试用例,以及和他们的顶 ...

  9. JS获取页面元素并修改

    //实现代码如下,非常简单<script> (function(){ var ele = document.getElementsByTagName("ul"); // ...

  10. VBA控件一些属性的解释

    VBA每个控件都有很多属性,虽然可以按照分类排序,但由于没有中文解释,有些属性也不了解如何使用,下面是一些控件属性的解释,不全,可供参考: 常规AutoLoad (Excel)打开工作簿时是否加载控件 ...