使用asp.net 2.0项目的基本身份验证调用wcf webapi服务

时间:2011-12-21 20:00:36

标签: asp.net-2.0 wcf-web-api

我正在开发一个使用wcf webapi将其所有功能公开为Web服务的项目。然后我用各种视图消费这些(现在两个)。其中一个观点是一个遗留的asp.net 2.0项目,一旦这个新项目具有特征奇偶校验,最终将逐步淘汰。我试图通过向项目添加服务引用来使用这些服务,但无法使其工作,因为wcf api使用基本的http auth,我无法在向导中配置它。如何手动将服务引用添加到我的asp.net项目?

谢谢!

1 个答案:

答案 0 :(得分:2)

使用WCF Web API时,不要使用服务引用,而是使用新的HttpClient,例如:

var client = new HttpClient();
var byteArray = Encoding.ASCII.GetBytes(userName + ":" + password);
client.DefaultRequestHeaders.Authorization = 
    new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
var task = client.GetAsync("http://webapi/contact/1");
var contact = task.ContinueWith(
    t => {
        return t.Result.Content.ReadAsAsync<Contact>();
}).Unwrap().Result;

如果您需要使用.NET 2.0,您可以使用HttpWebRequest(HttpClient示例依赖于.NET 4.0,因为它是WCF Web API的一部分):

Uri myUri = new Uri("http://webapi/contact/1");
WebRequest myWebRequest = HttpWebRequest.Create(myUri);

HttpWebRequest myHttpWebRequest = (HttpWebRequest)myWebRequest;

NetworkCredential myNetworkCredential = 
    new NetworkCredential(username, password);

CredentialCache myCredentialCache = new CredentialCache();
myCredentialCache.Add(myUri, "Basic", myNetworkCredential);

myHttpWebRequest.PreAuthenticate = true;
myHttpWebRequest.Credentials = myCredentialCache;

WebResponse myWebResponse = myWebRequest.GetResponse();

Stream responseStream = myWebResponse.GetResponseStream();