“500:Erro interno do servidor” ao tentar adicionar um arquivo de texto simples como anexo por meio da API REST do SharePoint 2013

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/59898

Pergunta

Usando API REST do SharePoint 2013, estou tentando anexar um arquivo de texto simples a um item da lista.

jQuery.ajax({
    url: web.get_url() + "/_api/web/lists/GetByTitle('List1')/items(1)/AttachmentFiles/add(FileName='readme.txt')",
    type: "POST",
    headers: {
        "body": "Contents of file.",
        "content-length": 17,
        "X-RequestDigest": $("#__REQUESTDIGEST").val()
    },
    success: doSuccesRestAPIAddAttachment,
    error: doErrorRestAPIAddAttachment
  });

Estou tendo o erro a seguir:

500:Internal Server Error
<?xml version="1.0" encoding="utf-8"?><m:error xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"><m:code>-2147024883, Microsoft.SharePoint.SPException</m:code><m:message xml:lang="en-US">The data is invalid. (Exception from HRESULT: 0x8007000D)</m:message></m:error>

Alguém pode me dizer o que estou fazendo de errado?

Obrigado.

Foi útil?

Solução

Pergunta interessante!Eu li a página que você linkou.As instruções lá são um pouco confusas às vezes.Depois de algumas experiências, eu poderia adicionar um anexo como você faz:

$.ajax({
    url: "/_api/web/lists/GetByTitle('List1')/items(1)/AttachmentFiles/add(FileName='readme.txt')",
    type: "POST",
    data: "Contents of file.",
    headers: {        
        "X-RequestDigest": $("#__REQUESTDIGEST").val()
    }
  });

Testei diretamente na web raiz e não forneci nenhum retorno de chamada apenas para simplificar.Removi o cabeçalho "Content-Length" porque o Chrome reclamou de "cabeçalho inseguro".Eu coloquei o "conteúdo do arquivo". na carga útil da solicitação (data: "Contents of file.").O exemplo abaixo funciona para mim.Diga se não funciona para você.

Resposta original:

Talvez não seja a resposta completa, mas "corpo" não deveria estar dentro dos cabeçalhos.Tente colocá-lo fora do corpo.

jQuery.ajax({
    url: web.get_url() + "/_api/web/lists/GetByTitle('List1')/items(1)/AttachmentFiles/add(FileName='readme.txt')",
    type: "POST",
    body: "Contents of file.",
    headers: {        
        "content-length": 17,
        "X-RequestDigest": $("#__REQUESTDIGEST").val()
    },
    success: doSuccesRestAPIAddAttachment,
    error: doErrorRestAPIAddAttachment
  });
Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top