none
System.Web.HttpContext 在 VS 2013 中不被支持了吗? RRS feed

  • 问题

  • 异常详细信息: System.Web.HttpException: 请求在此上下文中不可用

    在 VS 2012 与 VS 2010 中调试运行全部正常的代码,在 VS 2013 运行调试中就出现以上问题。

    在 类 文件里就一直报错。

    System.Web.HttpContext.Current.Request.MapPath("~/App_Data"); 一直报错。

    怎么解决这个问题。。。头疼了。


    Sherrys

    2013年10月27日 9:14

答案

  • 我还是在新建的工程(.net4.5)中.

    1.加入App_Code文件夹.加入新的类MyClass

    2. 修改.cs属性的Build Action为Compile,默认为Content. 

    3. 加入下面代码:

        public class MyClass
        {
            public static string APP_DATA_PATH = System.Web.HttpContext.Current.Server.MapPath("~/App_Data");
        }

    4. app start中访问:

        public class Global : HttpApplication
        {
            void Application_Start(object sender, EventArgs e)
            {
                // Code that runs on application startup
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
    
                string result = MyClass.APP_DATA_PATH;
            }
        }
    vs2013中调试没有问题.

    • 已标记为答案 Sherrys 2013年10月28日 3:49
    2013年10月28日 3:29

全部回复

  • 从msdn上看是支持的啊。

    HttpRequest.MapPath Method (String)

    http://msdn.microsoft.com/en-us/library/0e7ykf56.aspx

    你选择的是什么版本的.net?在哪里调用的?


    • 已编辑 Simon Cai 2013年10月27日 23:17
    2013年10月27日 23:16
  • 我新建一个webform,在page_load中执行是没有问题的

            protected void Page_Load(object sender, EventArgs e)
            {
                string result = System.Web.HttpContext.Current.Request.MapPath("~/Models");
            }

    .net 4.5

    2013年10月27日 23:23
  • 建议使用 Server.MapPath
    2013年10月28日 1:09
  • 之前一直用 VS 2012 , 没问题,也就是在 APP_CODE 里面有一个普通的 .CS 文件。

    写了一段静态代码,

    public static string APP_DATA_PATH = System.Web.HttpContext.Current.Request.MapPath("~/App_Data");

    一直没有问题,

    但是用了 VS2013 以后,这个代码编译能通过,但是一执行就会报错。


    Sherrys

    2013年10月28日 2:51
  • 我也尝试新建一个新的 WEB,单独测试是没问题,所以就很奇怪啊。

    Sherrys

    2013年10月28日 2:52
  • 在普通 .CS 里面用不了 Server 类

    Sherrys

    2013年10月28日 2:53
  • 问题找到了。

    这个代码以前一直写在 Global.asax 文件里的。代码如下

        void Application_Start(object sender, EventArgs e) 
        {
            // 在应用程序启动时运行的代码
            string a = Class1.APP_DATA_PATH;
        }

    这个代码在 VS 2010 VS2012 都是无问题的,编译与执行都可以通过。

    但是在 VS2013 里面,编译能过,执行就会报错。

    “System.TypeInitializationException”类型的异常在 App_global.asax.kzod13qj.dll 中发生,但未在用户代码中进行处理

    其他信息: “Class1”的类型初始值设定项引发异常。

    可以测试下,这个问题怎么解决?


    Sherrys

    2013年10月28日 2:57
  • 我找到了新的问题,麻烦帮忙测试下。谢谢。~

    Sherrys

    2013年10月28日 2:58
  • 得有Request时,才能访问HttpContext.Current.Request。Application_Start中是访问不到的
    2013年10月28日 3:20
  • 但是奇怪的就是这个代码在 VC 2012 2010 都是可以编译通过也可以执行成功,部署到线上后也是没问题的。

    Sherrys

    2013年10月28日 3:27
  • 我还是在新建的工程(.net4.5)中.

    1.加入App_Code文件夹.加入新的类MyClass

    2. 修改.cs属性的Build Action为Compile,默认为Content. 

    3. 加入下面代码:

        public class MyClass
        {
            public static string APP_DATA_PATH = System.Web.HttpContext.Current.Server.MapPath("~/App_Data");
        }

    4. app start中访问:

        public class Global : HttpApplication
        {
            void Application_Start(object sender, EventArgs e)
            {
                // Code that runs on application startup
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
    
                string result = MyClass.APP_DATA_PATH;
            }
        }
    vs2013中调试没有问题.

    • 已标记为答案 Sherrys 2013年10月28日 3:49
    2013年10月28日 3:29