1

我已经使用 WebApi 构建了一个 RESTful Web 服务。我正在使用实体框架连接到数据库。本地工作正常。当我将站点上传到主机提供商并发出请求时,我会返回 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 SqlConnectionSqlCommand它工作正常。第二个奇怪的是,如果我在本地运行项目并在连接字符串中连接到远程服务器,它也可以工作!

虽然刚来找我。难道是我的连接字符串是这样的,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 question 中的一些建议,但没有任何效果。 禁用 WebAPI 的 Windows 身份验证

请问有什么建议吗?我已经为此苦苦挣扎了 3 天,实现了 HttpModules,自定义属性,阅读了有关处理程序的信息。我现在真的不知所措。

4

1 回答 1

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>
于 2013-06-20T14:14:23.767 回答