7

Je transmets la propriété Folder.Id.UniqueId d'un dossier extrait d'une requête FindFolders via la chaîne de requête à une autre page. Sur cette deuxième page Je veux utiliser cette UniqueId pour se lier au dossier à la liste de ses envois postaux:Folder.Bind - "ID est incorrect" - API gérée Exchange Web Services

string parentFolderId = Request.QueryString["id"]; 
... 
Folder parentFolder = Folder.Bind(exchangeService, parentFolderId); 
// do something with parent folder 

Quand je lance ce code, il jette une exception en me disant Id est malformé. Je pensais que peut-être besoin d'être enveloppé dans un objet FolderId:

Folder parentFolder = Folder.Bind(exchangeService, new FolderId(parentFolderId)); 

Même problème.

J'ai recherché pendant un certain temps, et j'ai trouvé quelques suggestions sur la conversion Base64/UTF8, mais encore une fois cela n'a pas résolu le problème.

Quelqu'un sait comment lier à un dossier avec un identifiant unique donné?

Répondre

0

La valeur parentFolderId est-elle correctement formée ou est-elle simplement instable lorsque vous essayez d'instancier l'objet de dossier? Est-ce que vous créez un HttpUtility.UrlEncode sur l'id avant de le passer comme une chaîne de requête (n'oubliez pas de faire un HttpUtility.UrlDecode par la suite)

0

Vous devez vous assurer que l'id est correctement codé. Voici un exemple.

Modèle:

public class FolderViewModel 
{ 
    public string Id { get; set; } 
} 

Controller:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     ExchangeService service = new ExchangeService(); 
     service.Credentials = new NetworkCredential("username", "pwd", "domain"); 
     service.AutodiscoverUrl("[email protected]"); 

     // Get all folders in the Inbox 
     IEnumerable<FolderViewModel> model = service 
      .FindFolders(WellKnownFolderName.Inbox, new FolderView(int.MaxValue)) 
      .Select(folder => new FolderViewModel { Id = folder.Id.UniqueId }); 

     return View(model); 
    } 

    public ActionResult Bind(string id) 
    { 
     Folder folder = Folder.Bind(service, new FolderId(id)); 
     // TODO: Do something with the selected folder 

     return View(); 
    } 
} 

Et la vue Index:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<SomeNs.Models.FolderViewModel>>" %> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

<% foreach (var folder in Model) { %> 
    <%: Html.ActionLink(Model.Id, "Bind", new { id = Model.Id }) %> 
<% } %> 

</asp:Content> 
7

J'ai eu un problème similaire et utilisé urlencode/urldecode pour vous assurer que les ids était correctement formaté. Cependant, l'un des utilisateurs avait des messages qui entraîneraient des erreurs.

Il s'est avéré que certains identificateurs avaient un signe +, ce qui entraînait un espace vide lors du décodage. Un simple remplacement de '' le '+' a fait l'affaire.

Peut être le problème.

Je sais que la question a été posée il y a longtemps, mais cela pourrait être utile à d'autres dans le futur.

Questions connexes