0

У меня есть RESTful Web API, который работает правильно, поскольку я могу проверить его с помощью Fiddler. Я вижу, что звонки проходят, я вижу, что ответы возвращаются.Вызов веб-API не возвращается

Я разрабатываю приложение планшета, которое должно использовать веб-API для извлечения данных или обновления в репозитории.

Мои вызовы не возвращаются, и в Fiddler нет ни одной трассы, чтобы показать, что мои вызовы даже достигают сервера.

Первый звонок, который мне нужно сделать, - это войти в систему. URI будет следующим образом:

http://localhost:53060/api/user

Этот вызов обычно возвращают некоторую информацию о пользователе (например, членство в группе, уровень разрешения и так далее). Веб-API использует проверку подлинности Windows, поэтому репозиторий способен разрешать все эти поля на основе переданных учетных данных. Как я уже сказал, в Fiddler я вижу три вызова, сделанных в URI, когда аутентификация согласовывается между вызывающим и сервером , Третий вызов возвращается с объектом JSON, который содержит всю информацию, полученную из репозитория, как и ожидалось.

Теперь, переходя к моему клиенту у меня есть следующие:

var webApiClient = new HttpClient(new HttpClientHandler() 
            { 
            UseDefaultCredentials = true 
            }) 
        { 
         BaseAddress = new Uri("http://localhost:53060/") 
        }; 

webApiClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

HttpResponseMessage response = await webApiClient.GetAsync("api/user"); 
var userLoginInfo = await response.Content.ReadAsAsync<UserLoginInformation>(); 

Мой призыв к «GetAsync» никогда не возвращается и, как я уже сказал, я не вижу никаких следов его в Fiddler.

Любая идея о том, что я делаю неправильно?

ТИА, Ed

+1

Локальный адрес на планшете не будет работать, даже в эмуляторе. Для его тестирования необходимо использовать имя компьютера или IP. – Nkosi

+0

@Nkosi Я не думаю, что это причина, потому что я видел, как он работал в видео Jesse Liberty на Pluralsight. Он создает приложение Windows Store и в сегменте, посвященном удаленным данным, он создает веб-API, который обслуживает данные в своем приложении WinStore. Он использует симулятор планшета, чтобы продемонстрировать доступ. Он обращается к веб-API, устанавливая BaseAddress на «http: // localhost: 33263». Он не использует проверку подлинности Windows. Это будет единственной разницей между тем, что я сделал, и тем, что он сделал. Вы говорите, что «localhost» не работает в интегрированной проверке подлинности Windows? Я дам ему попробовать – Eddie

+0

@Nkosi Возможно, вы были в самом начале.Я настроил свой IIS Express, чтобы выставить свой веб-API с помощью IP-адреса, и теперь я вижу, что по крайней мере один HTTP GET проходит. Он генерирует 401. В Fiddler, как только я проверяю флажок «Автоматически проверять подлинность», через проверку подлинности происходит три запроса. Последний возвращает с желаемым результатом HTTP 200. Мне нужно выяснить, как заставить мой клиент автоматически аутентифицироваться. – Eddie

ответ

0

Изменение URL, где разоблачал Web API, казалось, исправили проблему. Спасибо @Nkosi за предложение. Для тех, кто сталкивается с этим вопросом и спрашивает себя, как изменить URL-адрес веб-API, существует два способа. Если симулятор работает на одном компьютере с веб-API, это изменение должно быть сделано в файле «applicationhost.config» для IIS Express. Вы можете найти этот файл, щелкнув правой кнопкой мыши значок IIS Express в области уведомлений (нижний правый угол) и выбрав все веб-сайты. Выделите требуемый веб-API, и он покажет, где находится файл конфигурации хоста приложения. Там, нужно найти следующий раздел:

<bindings> 
    <binding protocol="http" bindingInformation="*:53060:localhost" /> 
</bindings> 

и заменить название «локальный» с IP-адресом компьютера, на котором веб-API работает.

Однако этот подход не будет работать после того, как вы начнете тестировать приложение планшета с помощью реального устройства. IIS Express должен быть принужден к раскрытию веб-API для внешнего мира. Я нашел отличный пакет node.js, который может помочь в этом. Он называется IISExpress-proxy.

 Смежные вопросы

  • Нет связанных вопросов^_^