Как преобразовать строку в IP-адрес

#c# #html #asp.net-core-mvc #ip-address #tempdata

Вопрос:

Я пытался использовать tempdata с ip-адресом, и когда я попытался назначить tempdata переменной ip-адреса, она сказала, что мне нужно ее сериализовать, поэтому я увидел в Интернете, как сериализовать переменную ip-адреса. После его реализации я столкнулся с проблемой в своем промежуточном программном обеспечении, где я создал переменную IPAddress ipAddress и назначил ее в операторе if для своих tempdata.containskey() как `IPAddress = (IPAddress)tempdata.Заглянуть(«ip-адрес»).toString(); но при отладке я увидел, что это дало мне исключение, говорящее:

Система.Исключение InvalidCastException: Невозможно привести объект типа «Система».Строка» для ввода » System.Net.IP-адрес’

Поэтому я затем изменил свой IPAddress ipAddress на string ipAddress и теперь, когда он попадет ipAddress внутрь оператора if для IP-адреса tempdata, он будет сохранен «»::1″» . Теперь это отображается как это с двумя»», потому что я отлаживаю его? И это действительно имеет значение «::1»? Просто хочу убедиться, что я не получаю IP-адрес, чтобы он сохранял такое значение с этими двумя.

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") amp;amp; 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);
            }
        }
    }
 

Ответ №1:

Если это то , что вы видите в отладчике*, то ваша переменная действительно содержит их " , я бы сказал, как следствие сериализации в строку в преобразователе json; Атрибуты и значения Json всегда заключены в кавычки. Если вам нужен IP-адрес в виде строки, у него есть переопределенный метод toString

  • если то, что вы видите во всплывающей подсказке отладки, наполняет вас косыми чертами и т. Д., Нажмите🔍, Чтобы открыть визуализатор текста; то, что вы видите, — это истинное точное содержимое строки (то, что вы увидели бы, если бы записали строку в файл и открыли ее в блокноте)

Комментарии:

1. Спасибо вам за объяснение! Поэтому, если бы я хотел, чтобы эта переменная была строкой, мне просто нужно было бы заменить string ipAddress ее, чтобы IPAddress затем вызвать . Метод toString? Когда я нажимаю на увеличительное стекло, оно показывает это точно так «::1».

2. Эта переменная в любом случае является строкой, она просто была преобразована из IP-адреса в строку с помощью сериализатора json, который добавил кавычки в начале и в конце. Если вы просто возьмете то, что у вас было в вашем домашнем контроллере TempData["ipaddress"] = JsonConvert.SerializeObject(userip, settings); , и сделаете это TempData["ipaddress"] = userip.ToString(); , вы получите это без кавычек

3. В этом есть смысл! Я ценю это! Спасибо вам 🙂