我有一个奇怪的问题,当然只发生在我们的生产箱上。它适用于我们的测试服务器和我的盒子。
我有一个ASP.NET MVC 3控制器,用于公开RESTful API。我已让匿名用户使用下面显示的代码调用这些服务。通过GET调用这些方法可以正常工作(使用WebRequest)。但是,在尝试POST数据时(使用HttpClient),它会因401错误而失败。
此Web服务托管在另一个使用Windows身份验证的IIS站点中。但我配置此目录以允许匿名和禁用Windows身份验证。它位于主站点下的/区域/服务中。
我已将IIS配置为允许匿名身份验证,甚至在web.config中启用它。但是,当我尝试将数据发送到此控制器时,我得到“401 - 未经授权:由于凭据无效而拒绝访问”。我不想要任何凭据!同样,GET在同一个控制器上也能正常工作。
这似乎是一个配置问题(因为它适用于QA),但我不知道任何其他配置事项。我已经为匿名/ windows / forms auth配置了IIS网站10年,但之前从未遇到类似这样的事情。
以下是允许MVC 3向任何人提供这些方法的代码:
[AuthorizeAnonymous]
public class LtWebsiteController : Controller
{
...
}
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
public class AuthorizeAnonymousAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (!(filterContext.Controller is LtWebsiteController))
base.OnAuthorization(filterContext);
}
}
这让我疯了!请帮忙。
答案 0 :(得分:1)
您可能缺少NTLM身份验证的HTTP标头。我会将HttpClient
配置为发送正确的凭据作为请求的一部分。
HttpClientHandler handler = new HttpClientHandler()
{
UseDefaultCredentials = true
};
HttpClient client = new HttpClient(handler);
由于您启用了匿名身份验证,因此令人困惑。但是,使用Windows身份验证时,请求需要具有正确的标头。 401
告诉我服务器扁平化拒绝HTTP请求。
http://www.asp.net/web-api/overview/security/integrated-windows-authentication