7

Estoy pasando la propiedad Folder.Id.UniqueId de una carpeta recuperada de una consulta FindFolders a través de la cadena de consulta a otra página. En esta segunda página Quiero usar que UniqueId para unirse a la carpeta a la lista de sus elementos de correo:Folder.Bind - "Id está mal formado" - API administrada de servicios web de Exchange

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

Cuando ejecuto el código que se produce una excepción que me dice el Ello es incorrecto. Pensé que tal vez necesita ser envuelto en un objeto FolderId:

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

mismo problema.

He estado buscando por un tiempo, y he encontrado algunas sugerencias sobre la conversión de Base64/UTF8, pero una vez más eso no resolvió el problema.

¿Alguien sabe cómo enlazar a una carpeta con una identificación única dada?

Respuesta

0

¿El valor de parentFolderId está formado correctamente, o simplemente está lanzando un tambaleante cuando intenta crear una instancia del objeto de carpeta? ¿Está haciendo una HttpUtility.UrlEncode en la identificación antes de pasarla como una cadena de consulta (no olvide hacer una HttpUtility.UrlDecode después)

0

Debe asegurarse de que la identificación esté codificada correctamente. Aquí hay un ejemplo.

Modelo:

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

controlador:

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(); 
    } 
} 

Y la vista Índice:

<%@ 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

que tenía un problema similar y urlencode/urldecode utilizado para asegurarse de que los identificadores era debidamente formateado. Sin embargo, uno de los usuarios tenía mensajes que generarían errores.

Resultó que algunos de los identificadores tenían un signo + que les daba como resultado un "espacio en blanco cuando se decodificaban". Un simple reemplazo de '' the '+' hizo el truco.

Podría ser el problema.

Sé que la pregunta fue hecha hace mucho tiempo, pero esto podría ser útil para otros en el futuro.

Cuestiones relacionadas