我在尝试使用 WebClient 从示例控制台应用程序连接到 ASP.NET webapi 服务(我自己运行)时遇到了一些问题。webapi 是 MVC4 的典型示例站点:
public HttpResponseMessage Get()
{
return Request.CreateResponse(HttpStatusCode.OK, new string[] { "value1", "value2" });
}
Controller 装饰有自定义的 Authenticate 属性:
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
orWebRequest
应该在发送凭据之前等待 401,这正是我在这里想要做的。
不用说上面的设置没有任何作用。我已经进入 IIS express 配置并更改了以下内容:
<basicAuthentication enabled="true" /> (in the security section)
<add name="BasicAuthenticationModule" lockItem="false" /> (in the modules section)
我遇到的问题是 401甚至在服务器代码实际被命中之前就被返回了。我的意思是,如果我在控制器或属性中插入断点,它们就不会被命中。错误的详细信息是关于错误 401.2的常见长文本,我认为这与 IIS 配置有关,但使用 IIS express 而不是好的 IIS,我没有一个好的 GUI 来解决这个问题。任何人都可以帮忙吗?
非常感谢!