Item.WebClientReadFormQueryString Item.WebClientReadFormQueryString Item.WebClientReadFormQueryString Property


Gets the query string that should be appended to the Exchange web client URL to open this item by using the appropriate read form in a web browser.

 property System::String ^ WebClientReadFormQueryString { System::String ^ get(); };
public string WebClientReadFormQueryString { get; }
Public ReadOnly Property WebClientReadFormQueryString As String

Property Value

A string value.


    /// <summary>
    /// Demonstrates how to open an item in Outlook Web App.
    /// </summary>
    /// <param name="service">An ExchangeService object that has already had credentials set and contains a valid service URL.</param>
    static void OpenOWAFromWebClientReadFormQueryString(ExchangeService service)
      // Create a view that will return the identifier for the first item in a folder.
      ItemView itemView = new ItemView(1);
      itemView.PropertySet = new PropertySet(BasePropertySet.IdOnly);

      // Make a call to EWS to get one item from the mailbox folder.
      FindItemsResults<Item> results = service.FindItems(WellKnownFolderName.Drafts, itemView);

      // Get the item identifier of the item to open in Outlook Web App.
      ItemId itemId = results.Items[0].Id;

      ExchangeServerInfo serverInfo = service.ServerInfo;
      var owaReadFormQueryString = string.Empty;
      var ewsIdentifer = itemId.UniqueId;

        // Make a call to EWS to bind to the item returned by the FindItems method.
        EmailMessage msg = EmailMessage.Bind(service, itemId);
        msg.Load(new PropertySet(BasePropertySet.IdOnly, EmailMessageSchema.WebClientReadFormQueryString));

        // Versions of Exchange starting with major version 15 and ending with Exchange Server 2013 build 15.0.775.09
        // returned a different query string fragment. This optional check is not required for applications that
        // target Exchange Online.
        if ((serverInfo.MajorVersion == 15) && (serverInfo.MajorBuildNumber < 775) &&(serverInfo.MinorBuildNumber < 09))
          // If your client is connected to an Exchange 2013 server that has not been updated to CU3,
          // this query string will be returned.
          owaReadFormQueryString = string.Format("#viewmodel=_y.$Ep&ItemID={0}",
            System.Web.HttpUtility.UrlEncode(ewsIdentifer, Encoding.UTF8));
          // If your client is connected to an Exchanger 2010, Exchange 2013 CU3, or Exchange Online server,
          // the WebClientReadFormQueryString is used.
          owaReadFormQueryString = msg.WebClientReadFormQueryString;

        // Create the URL that Outlook Web App uses to open the email message.
        Uri url = service.Url;
        string owaReadAccessUrl = string.Format("{0}://{1}/owa/{2}",
          url.Scheme, url.Host, owaReadFormQueryString);

        if (!string.IsNullOrEmpty(owaReadAccessUrl))
          System.Diagnostics.Process.Start("IEXPLORE.EXE", owaReadAccessUrl);
      catch (System.ComponentModel.Win32Exception ex)
        Console.WriteLine("ERRROR: Internet Explorer cannot be found.");


The item identifier for an Outlook Web App URL is the EWS identifier of the item. You can URL-encode the EWS item identifier and append it to the query string to get the Outlook Web App URL for an item.

Version differences

Versions of Exchange starting with major version 15 and ending with 15.00.775.009 do not return a correct query string fragment in the WebClientReadFormQueryString property.

In versions of Exchange earlier than major version 15, the item identifier for the Outlook Web App URL is an Outlook Web App identifier. If you are targeting a version of Exchange earlier than major version 15, you have to use the Microsoft.Exchange.WebServices.ExchangeService.ConvertID method to convert the identifier.

Applies to