Веб-сервис C # ASP.NET не может делать запросы - PullRequest
0 голосов
/ 30 августа 2018

Я нахожусь в проекте, где мне нужно заполнить текстовое поле (как если бы это был элемент управления select) данными, запрашиваемыми из веб-службы, пока пользователь пишет в текстовом поле.

Веб-сервис разработан в том же решении.

Проблема в том, что когда я делаю запрос со стороны клиента, он выдает мне сообщение:

"Failed to load http://.../wsConsultaAfiliados.asmx: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Я некоторое время искал и прочитал, что это проблема CORS. Однако я не понимаю, почему. Я запрашиваю данные для веб-службы со стороны клиента, которые находятся в том же домене.

По тому, что я искал, я понимаю, что по соображениям безопасности CORS запрашивает данные из домена X в домен Y.

Это первый раз, когда я использую веб-сервис, и я немного растерялся из-за схемы, которой я должен следовать.

Добавить код

public class wsConsultaAfiliados : System.Web.Services.WebService
    {

        /// <summary>
        /// Busca una lista de Afiliados que coincidan con los parámetros de entrada. Devuele DataTable.
        /// </summary>
        /// <returns></returns>     
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        [WebMethod]
        public DataTable ConsultarAfiliados(string oPrefixText)
        {
            var listaAfiliados = GetAfiliados(oPrefixText);

            return listaAfiliados;
        }

        /// <summary>
        /// Devuelve un DataTable con Codigo y Nombre del afiliado.
        /// </summary>
        /// <param name="oPrefixText"></param>
        /// <returns></returns>
        public DataTable GetAfiliados(string oPrefixText)
        {
            negPrevision neg = new negPrevision();
            return neg.obtenerAfiliadosPorNombre(oPrefixText);
        }
    }

Вот код из веб-сервисов. Он запрашивает данные для логического уровня.

1 Ответ

0 голосов
/ 30 августа 2018

Обновите ваш web.config следующим образом, чтобы разрешить каждый запрос

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
      </customHeaders>
    </httpProtocol>
</system.webServer>

Для IIS 7.5+ и Rewrite 2.0 вы можете использовать

<system.webServer>
   <httpProtocol>
     <customHeaders>
         <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
         <add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS,PUT,DELETE" />
     </customHeaders>
   </httpProtocol>
        <rewrite>            
            <outboundRules>
                <clear />                
                <rule name="AddCrossDomainHeader">
                    <match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="true">
                        <add input="{HTTP_ORIGIN}" pattern="(http(s)?://((.+\.)?domain1\.com|(.+\.)?domain2\.com|(.+\.)?domain3\.com))" />
                    </conditions>
                    <action type="Rewrite" value="{C:0}" />
                </rule>           
            </outboundRules>
        </rewrite>
 </system.webServer>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...