我正在尝试使用 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 语句中的 tempdata **ipAddress 时,ipAddress 将保留值“\”::1 \"”。现在是否以两个 \”显示该值,因为我正在调试它?它真的保留了“::1”的值吗?只是想确认我没有得到像那样的 ipAddress 值。
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);
}
}
}
答案 0 :(得分:1)
如果您在调试器中看到的是那样,那么您的变量确实包含这些 "
, 我认为是因为它已经被序列化成字符串;Json 属性和值总是用引号括起来。如果您想将 IPAddress 作为字符串,则可以覆盖ToString 方法...