Ссылка на тип 'HttpContextBase' утверждает, что она определена в 'System.Web', но не может быть найдена - PullRequest
0 голосов
/ 17 сентября 2018

Я получаю действительно странную ошибку, которую я обнаружил всего несколько раз с довольно обширным поиском.Я делаю атрибут авторизации для добавления в мои действия в проекте ASP.NET MVC в библиотеке классов.Я установил пакеты ASP через NuGet и могу использовать intellisense для получения HttpContext из filterContext, но он говорит, что тип HttpContext не может быть найден там, где он должен быть.

Ссылка на тип 'HttpContextBase 'утверждает, что он определен в' System.Web ', но не может быть найден.

Есть несколько версий этого в StackOverflow, но ни одна из них не работала для меня, так как большинство из них состояло изперезапуска Visual Studio или просто создания проекта.

EDIT

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

            }
        }
    }
}

Ошибка в HttpContext в операторе if.

1 Ответ

0 голосов
/ 25 сентября 2018

Я получал ту же ошибку в довольно простом приложении веб-страниц, которое состояло из одной страницы .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. Скорее всего, это неверно.

...