• Server.Transfer 时报 Error executing child request. 调试记录.


    InnerException 为: {"Server cannot set content type after HTTP headers have been sent."}

    经debug发现,是在:

      1  public string ContentType

     2     {
     3       get
     4       {
     5         return this._contentType;
     6       }
     7       set
     8       {
     9         if (this._headersWritten)
    10         {
    11           if (this._contentType != value)
    12           {
    13             throw new HttpException(System.Web.SR.GetString("Cannot_set_content_type_after_headers_sent"));
    14           }
    15         }
    16         else
    17         {
    18           this._contentTypeSet = true;
    19           this._contentType = value;
    20         }
    21       }
    22     }

    抛出的异常,调用是在:

       private void SetIntrinsics(HttpContext context, bool allowAsync)

        {
          ......

          HttpCapabilitiesBase browser 
    = this._request.Browser;
          
    this._response.ContentType = browser.PreferredRenderingMime;

    当第二次设置 ContentType并且两次不一致时,就会出现这个错误. 那么第一次是我们自己的程序设置的,类型是Text/XML.第二次是系统设置的,

    值是text/html .这样Exception就出现了.

    我们需要返回的类型是XML,因此需要修改第二次设置的值,也就是说要更改 browser.PreferredRenderingMime,this._request.Browser.所以:

    在 Server.Transfer前加入如下代码: 

    1 MyHttpBrowserCapabilities browse = new MyHttpBrowserCapabilities();

    2 browse.Capabilities = new Hashtable();
    3 BrowserCapabilitiesFactory factroy = new BrowserCapabilitiesFactory();
    4 factroy.ConfigureBrowserCapabilities(HttpContext.Current.Request.Headers, browse);
    5 HttpContext.Current.Request.Browser = browse;
    6 HttpContext.Current.Server.Transfer(....

    Class MyHttpBrowserCapabilities 也很简单:

      1  public class MyHttpBrowserCapabilities : HttpBrowserCapabilities

     2     {
     3         
     4         public override string PreferredRenderingMime
     5         {
     6             get
     7             {
     8                 return "Text/XML";
     9             }
    10         }
    11     }

    指示Mime一样而已.这样就不会出现Exception了. 

  • 相关阅读:
    BootStrap弹出框插件popover简单实例
    peity(jQuery 插件可以将元素内容转换为一个小的 <svg> 饼图,圆环图,条形图和折线图)
    java生成API文档
    搭建eova开发环境
    搭建jfinal+maven框架
    注解Annotation
    【转】hive时间函数
    [hive][转]hive修改 表/分区语句
    【java findbugs集锦】【转】May expose internal representation by incorporating reference to mutable object
    [java学习笔记]继承和组合
  • 原文地址:https://www.cnblogs.com/huigll/p/1986315.html
Copyright © 2020-2023  润新知