我尝试使用WebClient从示例控制台应用程序连接到ASP.NET webapi服务(我正在运行自己)时出现了一些问题。所述的WebAPI是从MVC4典型样本点:WebApi中的NetworkCredentials和授权
public HttpResponseMessage Get()
{
return Request.CreateResponse(HttpStatusCode.OK, new string[] { "value1", "value2" });
}
所述控制器被饰以自定义身份验证属性:
public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
{
if (actionContext.Request.Headers.Authorization == null)
{
var response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
response.Headers.Add("WWW-Authenticate", "Basic realm=\"localhost\"");
actionContext.Response = response;
return;
}
}
客户端代码是通常的:
var wb = WebRequest.Create("http://localhost:64921/Values");
wb.Credentials = new NetworkCredential("xxx", "xxx");
var aaa = wb.GetResponse();
Console.WriteLine(aaa);
Console.ReadLine();
现在,我知道WebClient
或WebRequest
应该在发送凭证之前等待401,这正是我在这里要做的。
不用说上面的设置没有什么作用。我已经到IIS快递配置,改变了以下内容:
<basicAuthentication enabled="true" /> (in the security section)
<add name="BasicAuthenticationModule" lockItem="false" /> (in the modules section)
,我有是,401获取返回甚至前的服务器代码actualy打的问题。我的意思是,如果我将一个断点放入控制器或属性中,它们不会被击中。错误的详细信息是关于错误401.2的常见长文本,我认为这与IIS配置有关,但使用IIS Express而不是IIS,我没有一个很好的GUI来解决这个问题。谁能帮忙?
非常感谢!
我该怎么做? IIS可以从哪里获得凭据有效的信息?无论如何,我必须在代码中检查这些数据库。无论如何,它是IIS在这里表达的问题,我无法找到如何获得凭据到我的代码,因为它总是发送401. – Tallmaris
@Tallmaris我_believe_如果你问IIS做基本的身份验证它会检查Windows帐户。你需要告诉IIS express不要做任何认证,然后自己完成。 –
@Tallmaris只要确保如果您使用的.net 4已安装4.0.3更新,或者您将无法设置www-authenticate标头。 –