none
WebAPI RRS feed

  • Pergunta

  • Boa tarde,

    Gostaria de criar uma APi em VB.Net que permita receber um arquivo XML, se possível algum exemplo, simples mesmo.

    Desde já agradeço

    quarta-feira, 14 de dezembro de 2016 19:33

Respostas

  • Fábio,

    Nesta thread do StackOverflow há um exemplo de método para receber arquivos na sua WebAPI: http://pt.stackoverflow.com/a/153255/58876

    public Task<HttpResponseMessage> Post()
    {
        HttpRequestMessage request = Request;
    
        if (!request.Content.IsMimeMultipartContent())
        {
            throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
        }
        string root = System.Web.HttpContext.Current.Server.MapPath("~/Data/");
        MultipartFormDataStreamProvider provider = new CustomMultipartFormDataStreamProvider(root);            
        var task = request.Content.ReadAsMultipartAsync(provider);            
        return task.ContinueWith(o =>
            {
                return new HttpResponseMessage()
                {
                    Content = new StringContent("File uploaded.")
                };
            }
        );
    }
    
    
    public class CustomMultipartFormDataStreamProvider : MultipartFormDataStreamProvider
    {
        public CustomMultipartFormDataStreamProvider(string path) 
            : base(path) { }
        public override string GetLocalFileName(HttpContentHeaders headers)
        {
            return headers.ContentDisposition.FileName;
        }
    }


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".


    quinta-feira, 15 de dezembro de 2016 11:23

Todas as Respostas

  • Olá Fábio,

    Segue as referências separadas de como fazer uma API com VB.NET e como trabalhar com XML no VB.NET

    API: https://www.youtube.com/watch?v=O_Cb7xrOXk8

    XML: http://www.macoratti.net/10/08/vbn_xml1.htm

    Basta unir na sua aplicação.

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    quinta-feira, 15 de dezembro de 2016 02:54
  • Olá André, obrigado pela atenção.

    Acho que minha pergunta não foi boa, vamos lá, gostaria de criar uma WebAPI, a necessidade é que preciso que um sistema de terceiro, me enviei um XML para que eu guarde em meu servidor, quero criar esta possibilidade.

    quinta-feira, 15 de dezembro de 2016 11:12
  • Fábio,

    Nesta thread do StackOverflow há um exemplo de método para receber arquivos na sua WebAPI: http://pt.stackoverflow.com/a/153255/58876

    public Task<HttpResponseMessage> Post()
    {
        HttpRequestMessage request = Request;
    
        if (!request.Content.IsMimeMultipartContent())
        {
            throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
        }
        string root = System.Web.HttpContext.Current.Server.MapPath("~/Data/");
        MultipartFormDataStreamProvider provider = new CustomMultipartFormDataStreamProvider(root);            
        var task = request.Content.ReadAsMultipartAsync(provider);            
        return task.ContinueWith(o =>
            {
                return new HttpResponseMessage()
                {
                    Content = new StringContent("File uploaded.")
                };
            }
        );
    }
    
    
    public class CustomMultipartFormDataStreamProvider : MultipartFormDataStreamProvider
    {
        public CustomMultipartFormDataStreamProvider(string path) 
            : base(path) { }
        public override string GetLocalFileName(HttpContentHeaders headers)
        {
            return headers.ContentDisposition.FileName;
        }
    }


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".


    quinta-feira, 15 de dezembro de 2016 11:23
  • Obrigado é isso mesmo.

    Só estou com problemas para converter a linha abaixo para vb.net

    return task.ContinueWith(o =>
            {
                return new HttpResponseMessage()
                {
                    Content = new StringContent("File uploaded.")
                };
            }
        );


    quinta-feira, 15 de dezembro de 2016 12:26
  • Tente assim:

    Return task.ContinueWith(Function(o) 
    Return New HttpResponseMessage() With { _
    	Key .Content = New StringContent("File uploaded.") _
    }
    
    End Function)
    Referência: http://converter.telerik.com/



    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".


    quinta-feira, 15 de dezembro de 2016 12:39
  • Não, apresenta a mensagem:

    Error 1 Overload resolution failed because no accessible 'ContinueWith' can be called with these arguments:
        'Public Function ContinueWith(Of TResult)(continuationFunction As System.Func(Of System.Threading.Tasks.Task, TResult)) As System.Threading.Tasks.Task(Of TResult)': Data type(s) of the type parameter(s) cannot be inferred from these arguments. Specifying the data type(s) explicitly might correct this error.
        Public Function ContinueWith(continuationAction As System.Action(Of System.Threading.Tasks.Task)) As System.Threading.Tasks.Task
        'Public Function ContinueWith(Of TNewResult)(continuationFunction As System.Func(Of System.Threading.Tasks.Task(Of System.Net.Http.MultipartFormDataStreamProvider), TNewResult)) As System.Threading.Tasks.Task(Of TNewResult)': Data type(s) of the type parameter(s) cannot be inferred from these arguments. Specifying the data type(s) explicitly might correct this error.
        Public Function ContinueWith(continuationAction As System.Action(Of System.Threading.Tasks.Task(Of System.Net.Http.MultipartFormDataStreamProvider))) As System.Threading.Tasks.Task C:\Users\ffreitas\Documents\API\WebAPI\WebAPI\Controllers\Default1Controller.vb 48 14 WebAPI


    quinta-feira, 15 de dezembro de 2016 12:44
  • Tente sem o parâmetro o:

    Return task.ContinueWith(Function() 


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quinta-feira, 15 de dezembro de 2016 13:05
  • Não funcionou.
    quinta-feira, 15 de dezembro de 2016 13:12
  • Pelo que entendi este é o retorno com a mensagem que o arquivo foi enviado, que também posso enviar em código, 200 = OK. É isso mesmo?
    quinta-feira, 15 de dezembro de 2016 13:34
  • Bom dia Fábio Freitas,

    Apresentou a mesma mensagem de erro?

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 16 de dezembro de 2016 13:05
    Moderador
  • Sim.
    sexta-feira, 16 de dezembro de 2016 13:22
  • Olá Fábio,

    Depois que você removeu a linha que o Juliano sugeriu, onde ocorre esse erro?


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    terça-feira, 20 de dezembro de 2016 12:40
    Moderador
  • Bom dia,

    Devido a falta de interação do autor dessa pergunta,

    essa thread está sendo fechada. Caso o problema ainda

    esteja ocorrendo, favor abrir uma nova thread.

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 23 de dezembro de 2016 11:03
    Moderador