我使用WebApi构建了一个RESTful Web服务。我正在使用Entity Framework连接到数据库。 Localy工作正常。当我将网站上传到主机提供商并发出请求时,我会收到401结果以及以下标题:
HTTP/1.1 401 Unauthorized
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
X-Powered-By: ASP.NET
X-Powered-By-Plesk: PleskWin
Date: Thu, 20 Jun 2013 11:28:47 GMT
Content-Length: 0
Proxy-Support: Session-Based-Authentication
第一件奇怪的事情是,如果不使用EF,我会使用经典的SqlConnection
和SqlCommand
。
第二个奇怪的是,如果我运行本地项目并在连接字符串中我连接到远程服务器,它也可以工作!
System.Data.SqlClient
作为提供者吗?
<add name="MyContext" connectionString="Data Source=(local);Initial Catalog=MyDB;User Id=user;Password=password;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
我在这个SO问题中尝试了一些建议,但没有任何效果。 Disable Windows Authentication for WebAPI
有什么建议吗?我已经在这3天了,实现了HttpModules,自定义属性,阅读有关处理程序的内容。我现在真的不知所措。
答案 0 :(得分:1)
从WWW-Authenticate标题中可以看出,Windows身份验证的情况显而易见。
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
您必须禁用Windows身份验证。如果您可以使用IIS管理器,请确保身份验证设置如下。
或者你可以使用web.config(假设集成了IIS 7)。
<system.webServer>
<security>
<authentication>
<anonymousAuthentication enabled="false" />
<basicAuthentication enabled="false" />
<windowsAuthentication enabled="false" />
</authentication>
</security>
...
<system.webServer>