如何将字符串转换为IP地址
How to convert string to IPAddress
我试图将 tempdata 与 ip 地址一起使用,当我尝试将 tempdata 分配给 ipaddress 变量时,它说我需要对其进行序列化,所以我在网上看到了如何序列化 ip 地址变量。实现它后,我 运行 在我的中间件中遇到了一个问题,我创建了一个变量 IPAddress ipAddress
并在我的 tempdata.containskey() 的 if 语句中将其分配为 `ipAddress = (IPAddress)tempdata.Peek("ipaddress").ToString();但是在调试时我看到它给了我一个例外说:
System.InvalidCastException: Unable to cast object of type 'System.String' to type 'System.Net.IPAddress'
然后我将我的 IPAddress ipAddress
更改为 string ipAddress
现在当它到达临时数据的 if 语句中的 ipAddress
时 ipAddress 将保持“\” ::1\"" 。现在是因为我正在调试它而显示为带有两个“\”'吗?它真的拥有“::1”的价值吗?只是想确保我没有让 ipAddress 保持像两个 \'s 那样的值。
Middleware
:
public class CorrelationIdMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger _logger;
private readonly ITempDataDictionaryFactory _tempDataDictionaryFactory;
public CorrelationIdMiddleware(RequestDelegate next, ILoggerFactory loggerFactory, ITempDataDictionaryFactory tempDataDictionaryFactory)
{
_next = next;
_logger = loggerFactory.CreateLogger<CorrelationIdMiddleware>();
_tempDataDictionaryFactory = tempDataDictionaryFactory;
}
public async Task Invoke(HttpContext context)
{
string correlationId = null;
string userName;
string ipAddress;
var tempData = _tempDataDictionaryFactory.GetTempData(context);
var key = context.Request.Headers.Keys.FirstOrDefault(n => n.ToLower().Equals("x-correlation-id"));
if (!string.IsNullOrWhiteSpace(key))
{
correlationId = context.Request.Headers[key];
_logger.LogInformation("Header contained CorrelationId: {@CorrelationId}", correlationId);
}
else
{
if (tempData.ContainsKey("username") && tempData.ContainsKey("ipaddress"))
{
userName = tempData.Peek("username").ToString();
ipAddress = tempData.Peek("ipaddress").ToString();
context.Response.Headers.Append("X-username", userName);
context.Response.Headers.Append("X-ipAddress", ipAddress);
}
correlationId = Guid.NewGuid().ToString();
_logger.LogInformation("Generated new CorrelationId: {@CorrelationId}", correlationId);
}
context.Response.Headers.Append("x-correlation-id", correlationId);
using (LogContext.PushProperty("CorrelationId", correlationId))
{
await _next.Invoke(context);
}
}
}
如果这是您在调试器中看到的*,那么您的变量确实包含那些 "
,我会说这是在 json 转换器中序列化为字符串的结果; Json 属性和值始终用引号括起来。如果你想要一个 IP 地址作为一个字符串,它有一个被覆盖的 ToString method...
- 如果您在调试工具提示中看到斜线等,请单击以打开文本可视化器;你所看到的是真正准确的字符串内容(如果你将字符串写入文件并在记事本中打开它,你会看到什么)
我试图将 tempdata 与 ip 地址一起使用,当我尝试将 tempdata 分配给 ipaddress 变量时,它说我需要对其进行序列化,所以我在网上看到了如何序列化 ip 地址变量。实现它后,我 运行 在我的中间件中遇到了一个问题,我创建了一个变量 IPAddress ipAddress
并在我的 tempdata.containskey() 的 if 语句中将其分配为 `ipAddress = (IPAddress)tempdata.Peek("ipaddress").ToString();但是在调试时我看到它给了我一个例外说:
System.InvalidCastException: Unable to cast object of type 'System.String' to type 'System.Net.IPAddress'
然后我将我的 IPAddress ipAddress
更改为 string ipAddress
现在当它到达临时数据的 if 语句中的 ipAddress
时 ipAddress 将保持“\” ::1\"" 。现在是因为我正在调试它而显示为带有两个“\”'吗?它真的拥有“::1”的价值吗?只是想确保我没有让 ipAddress 保持像两个 \'s 那样的值。
Middleware
:
public class CorrelationIdMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger _logger;
private readonly ITempDataDictionaryFactory _tempDataDictionaryFactory;
public CorrelationIdMiddleware(RequestDelegate next, ILoggerFactory loggerFactory, ITempDataDictionaryFactory tempDataDictionaryFactory)
{
_next = next;
_logger = loggerFactory.CreateLogger<CorrelationIdMiddleware>();
_tempDataDictionaryFactory = tempDataDictionaryFactory;
}
public async Task Invoke(HttpContext context)
{
string correlationId = null;
string userName;
string ipAddress;
var tempData = _tempDataDictionaryFactory.GetTempData(context);
var key = context.Request.Headers.Keys.FirstOrDefault(n => n.ToLower().Equals("x-correlation-id"));
if (!string.IsNullOrWhiteSpace(key))
{
correlationId = context.Request.Headers[key];
_logger.LogInformation("Header contained CorrelationId: {@CorrelationId}", correlationId);
}
else
{
if (tempData.ContainsKey("username") && tempData.ContainsKey("ipaddress"))
{
userName = tempData.Peek("username").ToString();
ipAddress = tempData.Peek("ipaddress").ToString();
context.Response.Headers.Append("X-username", userName);
context.Response.Headers.Append("X-ipAddress", ipAddress);
}
correlationId = Guid.NewGuid().ToString();
_logger.LogInformation("Generated new CorrelationId: {@CorrelationId}", correlationId);
}
context.Response.Headers.Append("x-correlation-id", correlationId);
using (LogContext.PushProperty("CorrelationId", correlationId))
{
await _next.Invoke(context);
}
}
}
如果这是您在调试器中看到的*,那么您的变量确实包含那些 "
,我会说这是在 json 转换器中序列化为字符串的结果; Json 属性和值始终用引号括起来。如果你想要一个 IP 地址作为一个字符串,它有一个被覆盖的 ToString method...
- 如果您在调试工具提示中看到斜线等,请单击以打开文本可视化器;你所看到的是真正准确的字符串内容(如果你将字符串写入文件并在记事本中打开它,你会看到什么)