阻止对ASP.NET .asmx Web服务的跨域调用是一种安全措施,用于防止恶意访问和攻击。以下是一些可以采取的措施:
public class CORSAttribute : System.Attribute, System.Web.Services.Protocols.SoapHeaderAttribute
{
public override void ProcessMessage(System.Web.Services.Protocols.SoapMessage message)
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept, Authorization");
}
}
然后,在Web服务方法上添加CORS
属性:
[WebMethod]
[CORS]
public string MyWebMethod()
{
return "Hello, world!";
}
<script>
标签来实现跨域访问。在ASP.NET .asmx Web服务中,可以通过在服务代码中添加以下代码来实现JSONP支持:[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string MyWebMethod(string callback)
{
string result = "Hello, world!";
if (!string.IsNullOrEmpty(callback))
{
result = callback + "(" + result + ");";
}
return result;
}
然后,客户端可以通过以下方式访问该Web服务:
function myCallback(data) {
alert(data);
}
var script = document.createElement('script');
script.src = 'http://example.com/MyWebService.asmx/MyWebMethod?callback=myCallback';
document.body.appendChild(script);
总之,阻止对ASP.NET .asmx Web服务的跨域调用可以通过使用CORS策略、JSONP或代理服务器来实现。
领取专属 10元无门槛券
手把手带您无忧上云