2016-01-12 4 views
0

Я работаю над проектом, где мне нужно предоставить REST API для клиентов, который вернет некоторые данные из базы данных в формате JSON. «До сих пор вот мой код контроллера:Reach .net web api from another pc

[Models.AllowCors] 
    public HttpResponseMessage Get(string Id) 
    { 
     string ClearName = Id.Replace("_", " "); 
     IQueryable<Models.User> userQuery = 
      from user in Models.TableAccesser.Users_Table where 
      user.Name == ClearName 
      select user; 
     return Request.CreateResponse(HttpStatusCode.OK, userQuery); 
    } 

Проблема я столкнулся в том, что я могу достигнуть апи только из того же ПК, как, где выполняется Web API. я могу достичь с помощью ссылки, как это:

 my_ip:54780/users/parameters 

Если я позвоню из того же компьютера, она работает нормально, но я не могу достигнуть его с другого ПК. Я попытался разрешить корс несколькими способами, но не работал. Я пробовал:

  • Включение CORS в webapiconfig.cs:

    var cors = new EnableCorsAttribute("*", "*", "*"); 
    config.EnableCors(cors); 
    

Он не работал

  • я попытался добавить новую запись в Интернете .config:

    <add name="Access-Control-Allow-Origin" value="*"/> 
    

это работало ни

  • то последнее, что я пытался добавлял функцию:

    public class AllowCors : ActionFilterAttribute 
    { 
    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) 
    { 
        if (actionExecutedContext == null) 
        { 
         throw new ArgumentException("ActionExecutedContext"); 
        } 
        else 
        { 
         actionExecutedContext.Response.Headers.Remove("Access-Control-Allow-Origin"); 
         actionExecutedContext.Response.Headers.Add("Access-Control-Allow-Origin", "*"); 
        } 
        base.OnActionExecuted(actionExecutedContext); 
    } 
    } 
    

Я попытался с помощью почтальона с другого компьютера, и XMLHttpRequest, AJAX , но никто не работал. есть задержка в течение примерно 20 секунд, а затем ничего, если я попытаюсь написать response.responseText, это просто «ошибка», не более того.

Не могли бы вы дать какие-либо идеи, что я могу попробовать получить от API? Этот API будет использоваться из мобильного приложения, поэтому он должен работать с простыми запросами.

Благодарим вас за консультацию.

+0

Испытываете ли вы это в среде work/server или из домашней среды? – Seany84

+0

Можете ли вы получить доступ к компьютеру с другого компьютера? Любой брандмауэр блокирует запросы? – Thangadurai

ответ

0

С вашего вопроса кажется, что вам нужно будет открыть порт на вашей машине веб-API. В вашем случае вам необходимо открыть порт 54780

Это довольно легко открыть свой порт, здесь страницу Microsoft с инструкциями о том, как это сделать: Open a port in Windows Firewall

  1. Откройте брандмауэр Windows, нажав кнопку Пуск Изображение кнопки «Пуск» и «Панель управления». В поле поиска введите брандмауэр и нажмите «Брандмауэр Windows».

  2. На левой панели щелкните Расширенные настройки. Требуется разрешение администратора. Если вам будет предложено ввести пароль администратора или подтверждение, введите пароль или подайте подтверждение.

  3. В диалоговом окне «Брандмауэр Windows с расширенной безопасностью» на левой панели щелкните «Входящие правила», а затем в правой панели нажмите «Новое правило».

  4. Следуйте инструкциям мастера добавления входящих сообщений и добавьте порт 54780 в свое правило.

Обратите внимание, что если вы используете сторонний брандмауэр, например. с вашим программным обеспечением AntiVirus вам нужно будет открыть порт в этом приложении.

+0

Спасибо, это была проблема. Теперь все работает отлично. – Norbert