我在使用ASP.Net。我想使用WebMethod
为我的CORS
创建跨域ajax调用。
我在互联网上遇到过很多例子,包括许多教程和SO问题,但不知怎的,对我来说都没有用。
看看这个例子,我在这个问题上找到的教程几乎是1:1的代码,并且非常基础:
// Default.aspx.cs
[System.Web.Services.WebServiceBinding(ConformsTo = System.Web.Services.WsiProfiles.BasicProfile1_1)]
public class MyService : System.Web.Services.WebService
{
[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Json, UseHttpGet = false)]
public string HelloWorld(string Test)
{
string result = "";
result = "Success";
return result;
}
}
// Global.asax
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods",
"GET, POST");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers",
"Content-Type, Accept");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age",
"1728000");
}
然后我尝试从我的Web浏览器控制台(当然是跨域调用)运行ajax
调用:
$.ajax({
url: "http://localhost:53561/MyService.asmx/HelloWorld",
type: "POST",
contentType: "application/json; charset=utf-8",
data: '{"Test":"asdf"}'
}).done(function (result) {
alert(result.d);
}).fail(function (result) {
alert(result.d);
});
XMLHttpRequest cannot load http://localhost:53561/MyService.asmx/HelloWorld. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://www.google.pl' is therefore not allowed access.
我的控制台出错了。
我需要做其他的antyhing吗?我应该在Web.config
或Global.asax
中添加更多代码吗?或者有更多的安全理由可以解释为什么这不起作用?