Member 12956755 Ответов: 2

Мне нужно передать объединенную строку в качестве url-адреса веб-api


Я разрабатываю проект PCL в Xamarin .Мне нужно динамически передать IP-адрес устройства в Url-адрес веб-api. Мой код выглядит следующим образом:

В коде позади:

string IpAdd = txtIP.Text;

IPAddress = "http://" + IpAdd + ":8124/api/Items/";

MainViewModel.FinalIPAddress = IPAddress;


В моей MainViewModel

public static string FinalIPAddress { get; set; }

public static readonly string WebServiceUrl = System.Net.WebUtility.UrlEncode(FinalIPAddress);

Но я не могу пройти через это. Приведенное ниже исключение будет выброшено.

Выбрасывается исключение: "система.InvalidOperationException ' в System. Net. Http.Phone.ni.DLL дополнительная информация: был предоставлен неверный URI запроса. URI запроса должен быть абсолютный URI или базовый адрес должен быть установлен.

Как с этим быть? Любая помощь будет оценена по достоинству. Заранее спасибо.

Что я уже пробовал:

[удаленный]

2 Ответов

Рейтинг:
5

Richard Deeming

Проблема в том, что вы объявили WebServiceUrl как поле. Это означает, что инициализатор будет запущен один раз, до первого доступа к классу, и в этот момент ваш FinalIPAddress будет null.

При обновлении FinalIPAddress свойство, оно не будет иметь никакого влияния на стоимость WebServiceUrl поле.

Попробуйте изменить WebServiceUrl в собственность:

public static string WebServiceUrl
{
    get { return System.Net.WebUtility.UrlEncode(FinalIPAddress); }
}

Однако, если вы пытаетесь вызов API, использующий этот URL-адрес, а не передача URL-адреса в качестве параметра API, то вам нужно будет удалить UrlEncode вызов:
public static string WebServiceUrl
{
    get { return FinalIPAddress; }
}


Member 12956755

Спасибо тебе, Ричард Диминг. Твое решение сработало.

Рейтинг:
0

Kaushikhalvadiya

Я думаю, вам нужно использовать HttpUtility.UrlEncodeUnicode и HttpUtility.UrlDecode

См. ссылки ниже

Функция urlencode и UrlDecode


Member 12956755

спасибо большое.Мне очень жаль, но я очень новичок в xamarin. но если не ошибаюсь. если вы видите мой вопрос, я уже использую HttpUtility.Urlencode в этой строке:
публичная статическая строка только для чтения WebServiceUrl = System.Net.WebUtility.UrlEncode (FinalIPAddress); pls поправьте меня, если я ошибаюсь, и если да, то можете ли вы показать, как использовать HttpUtility.UrlEncodeUnicode и HttpUtility.UrlDecode? пример должен дать мне направление.

Kaushikhalvadiya

Вы должны создать и передать url-адрес, как показано ниже.

Системы.Нет.WebUtility.Функция urlencode(FinalIPAddress); //это будет конвертировать ваши URL-адреса, такие как HTTP%3А%2Ф%2F125.236.25.23%3A8124%2Fapi%2FItems%, 2-ой этаж

а в web api напишите код для его декодирования, как показано ниже.

Системы.Нет.WebUtility.UrlDecode (FinalIPAddress); / / это преобразует Ваш url как http://125.236.25.23:8124/api/Items/

Надеюсь, это решит вашу проблему.:-)