这是一个基本的ASP.NET Web服务。我尝试使用AJAX调用通过HTTPS访问服务。我可以直接通过HTTPS从浏览器访问该服务,但是当尝试使用JavaScript访问该服务时,我收到以下错误(来自Chrome):
无法加载资源:服务器响应状态为403(禁止) https://mobile.kilpatricktownsend.com/hh/PSWebService.asmx/GetPeople
查看iis日志显示错误更具体地说是403.1执行访问被拒绝。运行Web服务的站点配置为启用了“脚本执行”权限的应用程序。
在IIS 7.0上托管服务时,完全相同的代码可以正常工作。 IIS 6.0(它不工作)和IIS 7.0(它正在工作)都使用.NET 4.0
在iis 7.0中启用了CORS,我通过在网站上添加以下标头值在iis 6.0上启用了CORS:
名="访问控制允许来源"值=" *" 命名="接入控制允许集管和#34; value =" Origin,X-Requested-With,Content-Type,Accept"
客户端和服务器之间没有代理服务器。其他一切都是网站设置和网络的标准。
这是AJAX呼叫:
$.ajax({
type: "POST",
url: "https://mobile.kilpatricktownsend.com/hh/PSWebService.asmx/GetPeople",
data: "{searchString:'" + txtBoxId.toString() + "'}",
contentType: "application/json; charset=utf-8",
success: getPeopleSucceed,
dataType: "json",
failure: getPeopleFailed
});
答案 0 :(得分:0)
I can access the service from a browser over HTTPS by htting it directly
浏览器只能访问HttpGet
次请求,并且无法通过浏览器访问HttpPost
种方法。给出HTTP 405 : Method not allowed.
错误。
在js ajax调用中,它发布了type: "POST"
,因此在ASP.net的情况下,请确保使用web service
或[WebMethod]
修饰[HttpPost]
方法方法
还尝试在数据中使用JSON.stringify
来序列化输入数据,如:
$.ajax({
type: "POST",
url: "https://mobile.kilpatricktownsend.com/hh/PSWebService.asmx/GetPeople",
data: JSON.stringify("{searchString:'" + txtBoxId.toString() + "'}"),
contentType: "application/json; charset=utf-8",
success: getPeopleSucceed,
dataType: "json",
failure: getPeopleFailed
});