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

时间:2019-12-09 06:12:31

标签: c# asp.net-core system.web

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

  

名称空间“ System.Web”中不存在类型或名称空间名称“ UI”(您是否缺少程序集引用?)[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 Code。如何摆脱这个错误?

1 个答案:

答案 0 :(得分:2)

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

您的选择是ASP.NET Core剃刀页面或Blazor。

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

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

看起来IpGeoLocation.IpGeoLocation包没有依赖关系,但是依赖于JSON.NET,因此您应该可以从ASP.NET Core中使用它。

更新

用以下代码替换该代码:

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

另外,请考虑改用IHttpClientFactory