在sapui5中使用Web服务时出现401错误

时间:2015-06-09 19:38:18

标签: asp.net authentication fiddler sapui5

我正在通过

在我的sapui5表中实现一个Web服务
   app.service('TodosService', function($http) {
   var todos = []
   return {
     todos: todos,
     getTodo: function(index) {
       return todos[index]
       }
    }
  })

当我在网络浏览器中启动我的代码并检查元素时,我收到以下错误:

无法加载资源:服务器响应状态为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 个答案:

答案 0 :(得分:0)

创建新的ODataModel,它会尝试为您调用的服务获取metadata。 对于不同的域(http://mywebservice.com)而言,它基本上是XMLHttpRequest,而不是您的页面(localhost)。因此,浏览器会阻止它,因为出于安全原因,它通常允许同一来源的请求。阅读same-origin policy

<强>解决方案: 当您想要执行跨域请求时,您需要做一些不同的事情。 原点(包含JavaScript的页面所在的位置)和目标:http://mywebservice.com(JavaScript试图访问的位置)域必须完全相同。  有关如何实现这一目标的教程是使用CORS

在.NET服务器中,您可以在 web.config 中进行配置,如下所示

 <system.webServer>
   <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Origin" value="your_clientside_websiteurl" />
     </customHeaders>
   </httpProtocol>
 <system.webServer>

答案 1 :(得分:0)

只需在桌面上克隆chrome的快捷方式,然后在快捷方式属性中在chrome可执行文件路径末尾添加参数--disable-web-security 例如 &#34; C:\ Program Files \ Google \ Chrome \ Application \ chrome.exe&#34; - 禁用网络的安全性

注意:在一个空格

之后,在目标位置添加该参数--disable-web-security