2017-02-12 4 views
1

У меня проблема при доступе к веб-интерфейсу asp.net через проект студии Android. Мой веб-API соединяется с базой данных через Entity Framework. Я хочу вызвать список Merchants через API Merchant Controller из представления продавца Android. Вот мой HttpGet метод Мерчант:Вызов веб-API Asp.net из Android Studio View

public class MerchantController : ApiController 
    { 
     private DostiCardDBEntities merchantEntities = new DostiCardDBEntities(); 

     [HttpGet] 
     public HttpResponseMessage listOfMerchant() { 
      return Request.CreateResponse(HttpStatusCode.OK, merchantEntities.MerchantTables.ToList()); 
     } 
} 

получить доступ список коммерсантов через метод AsyncTask doInBackground т.е.

private class ExecuteTask extends AsyncTask<String, Integer, String>{ 
     String jsonText = ""; 
     HttpsURLConnection connection; 
     @Override 
     protected String doInBackground(String... strings) { 
      try { 
       URL url = new URL("http://169.254.80.80:6040/api/Merchant"); 
       connection = (HttpsURLConnection) url.openConnection(); 
       connection.setRequestMethod("GET"); 
       connection.connect(); 
       InputStream inputStream = connection.getInputStream(); 

       int byteCharacter; 

       while ((byteCharacter = inputStream.read()) != -1){ 
        char c = (char) byteCharacter; 
        jsonText += c; 
       } 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      finally { 
       connection.disconnect(); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(String s) { 
      Toast.makeText(getApplicationContext(), jsonText, Toast.LENGTH_LONG).show(); 
     } 
    } 
+0

Какова точная проблема? Является ли ваше приложение аварийным, неожиданным и т. Д.? Пожалуйста, дополните. –

+0

Мое приложение разбилось Когда я использую HttpsURLConnection, и когда я использую HttpURLConnection или URLConnection, то onPostExecute метод Toast statement возвращает null @NarayanAcharya –

+0

Ваша конечная точка «http: // ..», поэтому использование HttpsUrlConnection может быть неправильным. При использовании другой опции входной поток, являющийся нулевым, вероятно, означает, что запрос не был успешным или ответа не было получено. Поэтому рекомендуется проверять состояние ответа перед чтением из входного потока. Кроме того, проверьте браузер, если эта конечная точка работает или нет, прежде чем пытаться это сделать. –

ответ

1

По умолчанию C# Web Api не доступны из стороны localhost т.е. в вашей локальной сети сеть. То, что вам нужно сделать, это перейти к вашему пути к проекту, и внутри вашей папки проекта есть одна папка с именем .vs, которая по умолчанию скрыта (это можно увидеть, изменив параметры папки и поиска).

Теперь открыта .vs папка и goto config папка и там открыта applicationhost.xml файл с помощью любого текстового редактора.

После открытия найти следующую строку

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

И обновления выше линии, как этот

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

Где 6040 является адрес порта вашего проекта. Сохранить и выйти из редактора. Теперь это позволяет вам получить доступ к веб-Api в вашем LAN-соединении. (несколько раз вам нужно запустить Visual Studio с привилегиями администратора).

Теперь в вашем мобильном телефоне откройте любой браузер и введите адрес, как этого

http://169.254.80.80:6040 

Если вы получите ответ от вашего API он прекрасно работает.

+0

Я уже сделал. См. Ниже ... но все же у меня проблема .. получение кода состояния = 400 ' ' –

+0

Я сказал 'bindingInformation =" *: 6040: * " ', который позволяет всем IP-адресам в вашей локальной сети получить доступ к вашему веб-API. И в вашем контроллере измените' listOfMerchant() 'на' GetListOfMerchant() 'и попробуйте. Проверьте этот URL-адрес в браузере мобильного телефона. – Shashanth

+0

И я забыл укажите, что если он не работает, отключите свой брандмауэр. – Shashanth

1

Вы можете проверить, является ли это вашим общедоступным IP-адресом, или проверить, доступен ли он за пределами вашего домена, так как ваше устройство должно находиться за пределами вашего домена, а также проверьте, предоставили ли вы доступ в Интернет в своем манифесте.

1

вы должны изменить HttpsURLConnection к HttpURLConnection, потому что ваш URL с использованием протокола HTTP не HTTPS

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

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