Folder.Bind - «Идентификатор неверен» - управляемый API-интерфейс веб-служб Exchange - PullRequest
8 голосов
/ 27 марта 2010

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

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

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

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

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

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

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

Ответы [ 3 ]

7 голосов
/ 28 октября 2010

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

Оказалось, что некоторые из идентификаторов имеют знак +, что приводит к появлению пустого пространства при декодировании. Простая замена «+» сделала свое дело.

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

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

0 голосов
/ 04 сентября 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("foo@company.com");

        // 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>
0 голосов
/ 31 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...