如何使用控制台应用程序中的表单身份验证来使用Web API Restful Web服务?

时间:2014-10-09 14:07:24

标签: c# web-services rest asp.net-web-api

我在Web API控制器中声明了以下函数。 IIS服务器配置为Web API使用表单身份验证(由于客户限制,无法启用基本身份验证):

[HttpGet]
[Authorize]
[Route("")]
public ContactDTO GetPharmacy()
{
    return ToContactDTO(customerContext.CurrentContact);
}

使用此服务作为使用Jquery Ajax($ .ajax(...))从Web浏览器中记录的用户可以正常工作。但是我想使用.Net的HttpClient类做同样的事情。我尝试了以下方法,但没有取得任何成功,总是获得401 Unathorized响应。

using (var client = new HttpClient())
{
     client.BaseAddress = new Uri("http://localhost:17200");

     AuthenticationHeaderValue authHeader = new AuthenticationHeaderValue("Forms", Convert.ToBase64String(new ASCIIEncoding().GetBytes(String.Format("{0}:{1}", "admin", "123456"))));
     client.DefaultRequestHeaders.Authorization = authHeader;
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

     HttpResponseMessage response = client.GetAsync("/api/pharmacies").Result;
}

我应该如何使用HttpClient处理表单身份验证?

谢谢。

1 个答案:

答案 0 :(得分:1)

对于表单身份验证,您需要提供身份验证cookie。要获取该Cookie,您可以使用approach described there。然后你需要用那个cookie建立你的api请求。如果某些内容无效,您可以随时将您的请求与您从浏览器中创建的原始请求进行比较。