Web Service C#ASP.NET无法发出请求

时间:2018-08-30 14:01:06

标签: javascript c# cors

我在一个proyect中,当用户在文本框中书写时,我必须用Web服务请求的数据填充文本框(好像它是一个选择控件)。

Web服务是在相同的解决方案中开发的。

问题是,当我从客户端发出请求时,它会抛出我:

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

我已经搜索了一段时间,但我读到这是CORS的问题。但是,我不明白为什么。我正在从同一域中的客户端向Web服务请求数据。

对于我搜索的内容,我了解到CORS是出于安全原因,当您将数据从X域发送到Y域时。

这是我第一次使用Web服务,但我对应该遵循的方案有些困惑。

添加代码

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);
        }
    }

这是来自Web服务的代码。它向逻辑层请求数据。

1 个答案:

答案 0 :(得分:-1)

像这样更新您的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>