我有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。如何摆脱这个错误?
答案 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
。