命名空间 'System.Web' 中不存在类型或命名空间名称 'UI'(是否缺少程序集引用?)

The type or namespace name 'UI' does not exist in the namespace 'System.Web' (are you missing an assembly reference?)

我有 asp.net core 2.2 个项目。我想在我的项目中使用 System.Web 但是当我尝试在我的控制器中使用它时它会这样说

The type or namespace name 'UI' does not exist in the namespace 'System.Web' (are you missing an assembly reference?) [D:\Projects\analytics\analytics.csproj]

我有project.csproj这样的文件

<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
  <TargetFramework>netcoreapp2.2</TargetFramework>
  <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
</PropertyGroup>

<ItemGroup>
  <PackageReference Include="IpGeoLocation.IpGeoLocation" Version="1.0.5" />
  <PackageReference Include="Microsoft.AspNetCore.App" />
  <PackageReference Include="System.Web" />
  <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" 
  />
  <PackageReference Include="MongoDB.Driver" Version="2.7.3" PrivateAssets="All" />
  <PackageReference Include="MongoDB.Driver.Core" Version="2.7.3" PrivateAssets="All" />
  <PackageReference Include="MongoDB.Bson" Version="2.7.3" PrivateAssets="All" />
</ItemGroup>

</Project>

我正在使用 System.Web 因为我正在实施第三方插件 ipinfo 以根据 ip 地址获取用户的位置。所以在我的控制器中我的功能就像

string ipInfoBaseUrl = "http://ipinfo.io/";
string userIpAddress = "66.54.123.13";
string ipUrl = ipInfoBaseUrl + userIpAddress;
string ipResponse = IPRequestHelper(ipUrl);
return ipResponse;

我的辅助函数就像

public string IPRequestHelper(string url)
{
        string checkURL = url;
        HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(url);

        HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse();

        StreamReader responseStream = new StreamReader(objResponse.GetResponseStream());

        string responseRead = responseStream.ReadToEnd();

        responseRead = responseRead.Replace("\n", String.Empty);
        responseStream.Close();
        responseStream.Dispose();

        return responseRead;
}

我正在使用 Visual Studio 代码。我怎样才能摆脱这个错误?

该命名空间属于 ASP.NET 网页,不是 .NET Core 的一部分,因此您不能在 ASP.NET Core 项目中使用它。

您的选择是 ASP.NET Core razor pages 或 Blazor。

如果您使用的是依赖于旧版 .NET Framework(非核心)的第 3 方库,您可能需要切换回并改用 classic ASP.NET。

对于 .NET Framework 中的 IP 地址,使用 System.Net.IPAddress class

看起来 IpGeoLocation.IpGeoLocation 包没有依赖项,但依赖于 JSON.NET,因此您应该可以从 ASP.NET 核心使用它。

更新

将该代码替换为以下内容:

public async Task<string> GetIpGeoLocationAsync(string url)
{
  using (var cl = new HttpClient())
    return await cl.GetStringAsync(url);
}

此外,请考虑改用 IHttpClientFactory