Folder.Bind - идентификатор неверен - управляемый API веб-служб Exchange

Я передаю свойство Folder.Id.UniqueId папки, полученной из запроса FindFolders через строку запроса, на другую страницу. На этой второй странице я хочу использовать этот UniqueId для привязки к папке и перечисления ее почтовых элементов:

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

Когда я запускаю этот код, он выдает исключение, сообщающее мне, что Id искажен. Я подумал, может быть, его нужно обернуть в объект FolderId:

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

Та же проблема.

Некоторое время я искал и нашел несколько предложений по преобразованию Base64 / UTF8, но, опять же, это не решило проблему.

Кто-нибудь знает, как привязать к папке с заданным уникальным идентификатором?


person Michael Shimmins    schedule 27.03.2010    source источник


Ответы (3)


У меня была аналогичная проблема, и я использовал urlencode / urldecode, чтобы убедиться, что идентификаторы были правильно отформатированы. Однако у одного из пользователей были сообщения, которые могли привести к ошибкам.

Оказалось, что в некоторых идентификаторах был знак +, что приводило к пустому пространству при декодировании. Простая замена "+" сделала свое дело.

Может быть проблема.

Я знаю, что этот вопрос был задан давно, но в будущем он может быть полезен другим.

person Christian Sparre    schedule 27.10.2010

Правильно ли сформировано значение parentFolderId или оно просто шатается, когда вы пытаетесь создать экземпляр объекта папки? Вы делаете HttpUtility.UrlEncode для идентификатора, прежде чем передавать его в качестве строки запроса (не забудьте впоследствии выполнить HttpUtility.UrlDecode)

person Dylan    schedule 31.08.2010

Вам нужно убедиться, что идентификатор правильно закодирован. Вот пример.

Модель:

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

Контроллер:

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

И представление индекса:

<%@ 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>
person Darin Dimitrov    schedule 04.09.2010