Jaya
Jaya

Reputation: 3921

How to pass authentication header (basic) to OData Service from a .NetClient

I was trying to implement a client for a odata service by following this article

http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/create-an-odata-v4-client-app

Challanges that I had:

Following the steps in the article, I figured that

1) the (ProductClient).odata.config was not auto generated - we could create one though

2) Client that requires credentials to access the endpoint (well in my case it was basic auth)

3) Most important- couldnt find a related article on stackoverflow as well :)

Have posted the solution below for newbies like me!

Upvotes: 4

Views: 10874

Answers (1)

Jaya
Jaya

Reputation: 3921

Solution

In order to achieve something similar to what is mentioned in the article (ie)

accessing strongly typed Odata entities via Odata endpoint that requires authentication -

static void ReadingODataEndPointByPassingMyBasicAuthCreds() {
  // e.g. URL =  http://localhost/myApi/odata
  var url = ConfigurationManager.AppSettings["MyAPIBaseUrl"]; 

  var container = new MyApi.Container(new Uri(url));

  container.SendingRequest2 += SendBaseAuthCredsOnTheRequest;

  foreach(var myEntity in container.MyEntities) {
   Console.WriteLine(myEntity.Name);
   Console.Write(string.Format("Description: {0}", myEntity.Description));
  }

  Console.Read();
 }

 private static void SendBaseAuthCredsOnTheRequest(object sender,
  System.Data.Services.Client.SendingRequest2EventArgs e) {
  var authHeaderValue = Convert.ToBase64String(Encoding.ASCII.GetBytes(String.Format("{0}:{1}", ConfigurationManager.AppSettings["username"]
                        , ConfigurationManager.AppSettings["password"])));
  //this is where you pass the creds.
  e.RequestMessage.SetHeader("Authorization", "Basic " + authHeaderValue); 

 }

Upvotes: 7

Related Questions