我正在通过我的sapui5表实现一个Web服务
var oModel = new sap.ui.model.odata.ODataModel("http://mywebservice.com/security.svc", false);
sap.ui.getCore().setModel(oModel);
当我在Web浏览器中启动我的代码并检查元素时,我收到以下错误:
无法加载资源:服务器响应状态为401(未授权)
XMLHttpRequest无法加载http://mywebservice.com/security.svc/ $元数据 . 请求的资源上没有'Access-Control-Allow-Origin'标头 . 因此不允许原点'http://localhost:53457'访问 . 响应具有HTTP状态代码401 .
我也在Fiddler测试了它,我得到:
HTTP / 1.1 401未经授权
缓存控制:私有
服务器:Microsoft-IIS / 8.0
Set-Cookie:ASP.NET;路径= /;仅Http
X-AspNet-Version:4.0.30319
WWW-Authenticate:谈判
WWW-Authenticate:NTLM
X-Powered-By:ASP.NET
日期:2015年6月9日星期二19:33:51 GMT
内容长度:0
代理支持:基于会话的身份验证
任何有关如何修复401错误的帮助将不胜感激 .
2 回答
创建一个新的
ODataModel
,它会尝试为您调用的服务获取metadata
. 它基本上是XMLHttpRequest到不同的域(http://mywebservice.com
),而不是你的页面(localhost
) . 因此浏览器会阻止它,因为出于安全原因,它通常允许同一来源的请求 . 阅读same-origin policySolution: 当您想要进行跨域请求时,您需要做一些不同的事情 . 原点(带有JavaScript的页面所在的位置)和目标:
http://mywebservice.com
(JavaScript试图访问的域)域必须完全相同 . 有关如何实现这一目标的教程是使用CORS .在.NET服务器中,您可以在 web.config 中进行配置,如下所示
只需在桌面上克隆chrome的快捷方式,然后在快捷方式属性中添加chrome可执行文件路径末尾的参数--disable-web-security,例如“C:\ Program Files \ Google \ Chrome \ Application \ chrome.exe “--disable-web-security
注意:在一个空格后在目标位置添加该参数--disable-web-security