我遇到了一个非常奇怪的错误,通过一些相当广泛的谷歌搜索,我只发现了几次。我正在创建一个授权属性,以将其添加到类库中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上。
答案 0 :(得分:2)
我在一个相当简单的Web页面应用程序中遇到了相同的错误,该应用程序由一个单独的.cshtml
页面组成,该页面完全没有执行任何操作(“ Hello World”)。就我而言,该错误是由于引用了错误的.NET版本造成的。
显然,如果您只是从头创建基本的web.config
和index.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目标版本。很有可能是错误的。