对类型“ HttpContextBase”的引用声称它是在“ System.Web”中定义的,但找不到

时间:2018-09-17 19:59:26

标签: c# asp.net .net asp.net-mvc visual-studio

我遇到了一个非常奇怪的错误,通过一些相当广泛的谷歌搜索,我只发现了几次。我正在创建一个授权属性,以将其添加到类库中ASP.NET MVC项目中的Actions上。我通过NuGet安装了ASP程序包,并且可以使用intellisense从filterContext中获取HttpContext,但这是说HttpContext类型在应有的位置找不到。

  

引用类型'HttpContextBase'声称它是在'System.Web'中定义的,但是找不到。

StackOverflow上有几个版本,但是它们都不适合我,因为其中大多数是重新启动Visual Studio或只是构建项目。

编辑

using System.Web.Mvc;
namespace Foo
{
    public class RequireLogin : IAuthorizationFilter
    {
        public void OnAuthorization(AuthorizationContext filterContext)
        {
            if (filterContext.HttpContext.Request.Cookies)
            {

            }
        }
    }
}

错误发生在if语句的HttpContext上。

1 个答案:

答案 0 :(得分:2)

我在一个相当简单的Web页面应用程序中遇到了相同的错误,该应用程序由一个单独的.cshtml页面组成,该页面完全没有执行任何操作(“ Hello World”)。就我而言,该错误是由于引用了错误的.NET版本造成的。

显然,如果您只是从头创建基本的web.configindex.cshtml,则默认引用.NET版本2,因此未定义HttpContextBase

将目标版本更改为.NET 4.x,问题已解决。

我能够使用的最简单的web.config是:

<?xml version="1.0"?>
<configuration>
  <system.webServer>
    <defaultDocument>
      <files>
        <add value="index.cshtml"/>
      </files>
    </defaultDocument>
  </system.webServer>
  <system.web>
    <compilation targetFramework="4.6.2" debug="true"/>
  </system.web>
</configuration>

摘要,请检查您的.NET目标版本。很有可能是错误的。