我在一个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服务的代码。它向逻辑层请求数据。
答案 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>