Custom requests to resources using C#

This sample demonstrates how to get data from a protected resource by using a HttpWebRequest object and the MobileFirst WLAuthorizationManager API for Windows 8 Universal app.

After a response was first received, the WLAuthorizationManager class determines whether this response is a MobileFirst protocol response. If so, the user gets the scope, obtains the authorization header for this scope, and requests the protected resource one more time.

class WebReqInfo {
  public HttpWebRequest request = null;
}
	
private async void externalOAuthFlow() {
  // Create a HttpWebrequest object to the desired URL.
  HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:3000/v1/apps/1234/test");
  request.BeginGetResponse(new AsyncCallback(responseCallback), new WebReqInfo(){ request=request });
}

private void responseCallback(IAsyncResult asyncResult) { 
  WebReqInfo wReqInfo = null;
  HttpWebResponse response = null;
  try {
    /* Send the request to the server and wait for it to complete */
    wReqInfo = (WebReqInfo)asyncResult.AsyncState;
			
    // Get response
    response = wReqInfo.request.EndGetResponse(asyncResult) as HttpWebResponse;
		
    WLResponse newResponse = new WLResponse(response);
    int sCode = newResponse.getStatus().GetHashCode();

    // Check that the response conforms to the MFP protocol
    if (WLAuthorizationManager.getInstance().isAuthorizationRequired(response)) {
      // Get required scope from response
      String scope = WLAuthorizationManager.getInstance().getAuthorizationScope(response);
    
	  //Obtain authorization header for the scope
      WLAuthorizationManager.getInstance().obtainAuthorizationHeader(scope, new MyResponseListener());
    }	
    else {
      // At this point a response from the resource was received, process it:
      processResponse(response)	
    }
  } catch (Exception e) {
    Debug.WriteLine("Exception during request");
  }
}

public class MyResponseListener : WLResponseListener {
  HttpWebRequest request;
  public MyResponseListener(HttpWebRequest request) {
    this.request = request;
  }
  class WebReqInfo {
    public HttpWebRequest request = null;
  }

  // This method will be invoked if an authorization header was obtained successfully:
  public void onSuccess(WLResponse response) {
  
    // Add the obtained authorization header to the original request
    WLAuthorizationManager.getInstance().addCachedAuthorizationHeader(request);
    try {
      // Resend the request
      request.BeginGetResponse(new AsyncCallback(resendRequestCallback), new WebReqInfo(){request=request });
    } catch (Exception e) {
      Debug.WriteLine("Unable to obtain token");
    }
  }

  // This method will be invoked if an authorization header was not obtained:
  public void onFailure(WLFailResponse response) {
    Debug.WriteLine("Unable to obtain Token");
  }
  
  private void resendRequestCallback(IAsyncResult asyncResult) {
    WebReqInfo wReqInfo = null;
    HttpWebResponse response = null;
    try {
      /* Send the request to the server and wait for it to complete */
      wReqInfo = (WebReqInfo)asyncResult.AsyncState;
      response = wReqInfo.request.EndGetResponse(asyncResult) as HttpWebResponse;
      processResponse(response);
    } catch (Exception e) {
      Debug.WriteLine("Exception during request");
    }
  }
}
For more information about WLAuthorizationManager, see C# client-side API for Windows 8 Universal and Windows Phone 8 Universal apps.