Search code examples
c#asp.net-web-apihttpwebrequest

Get file from Web api with HttpWebRequest and HttpWebResponse


I have a web api project like below

    [HttpPost]
    [BasicAuth]
    public async Task<byte[]> UploadFileAndOtherParamsAndGetDoc(IFormFile file, string test)
    {
        return await file.GetFileArray();
    }

then I consume web api as below codes

  [HttpPost]
    public ActionResult DownloadProfilePicture(HttpPostedFileBase file)
    {
        
        string boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x");
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri("https://localhost:44387/api/file/UploadFileAndOtherParamsAndGetDoc"));

        request.ContentType = "multipart/form-data; boundary=" +
                    boundary;
        request.Method = "POST";
        request.KeepAlive = true;

        Stream memStream = new System.IO.MemoryStream();

        var boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
        var endBoundaryBytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--");

        string formdataTemplate = "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\";\r\n\r\n{1}";

        string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + "Content-Type: application/octet-stream\r\n\r\n";

        memStream.Write(boundarybytes, 0, boundarybytes.Length);
        var header = string.Format(headerTemplate, "file", file.FileName);
        var headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
        memStream.Write(headerbytes, 0, headerbytes.Length);

        byte[] Bytes = new byte[file.InputStream.Length];
        file.InputStream.Read(Bytes, 0, Bytes.Length);
        memStream.Write(Bytes, 0, Bytes.Length);

        memStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
        request.ContentLength = memStream.Length;

        var username = "fdg";
        var password = "dsffsd";
        string encoded = Convert.ToBase64String(Encoding.UTF8.GetBytes(username + ":" + password));
        if (username != null && password != null) request.Headers.Add("Authorization", "Basic " + encoded);

        using (Stream requestStream = request.GetRequestStream())
        {
            memStream.Position = 0;
            byte[] tempBuffer = new byte[memStream.Length];
            memStream.Read(tempBuffer, 0, tempBuffer.Length);
            memStream.Close();
            requestStream.Write(tempBuffer, 0, tempBuffer.Length);
        }
        byte[] str = null;
        using (var response = request.GetResponse() as HttpWebResponse)
        {
            Stream stream2 = response.GetResponseStream();
            StreamReader reader = new StreamReader(stream2);
            var reader1 = new BinaryReader(response.GetResponseStream());

             str = reader1.ReadBytes(16*1024);

        }
        return File(str, System.Net.Mime.MediaTypeNames.Application.Octet);
    }

And returns unwanted format like "Y3VybCAtWCBQT1NUIFwNCiAgaHR0cHM6Ly9sMjAxNzEtaWZsbWFwLmhjaXNicC5ldTEuaGFuYS5vbmRlbWFuZC5jb20vaHR0cC9FZmxvdy9QTyBcDQogIC1IICdhY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24nIFwNCiAgLUggJ2F1dGhvcml6YXRpb246IEJhc2ljIFVESXdNREV5TkRBd01qZzZaRkpuVld0WWNESnpOWFk0ZVM5QlAwUW9SeXRMWWxCbFUyaFdiVmx4TTNRPScgXA0KICAtSCAnY2FjaGUtY29udHJvbDogbm8tY2FjaGUnIFwNCiAgLUggJ2NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vanNvbicgXA0KICAtSCAnZW50aXR5OiBBX1B1cmNoYXNlT3JkZXInIFwNCiAgLUggJ3Bvc3RtYW4tdG9rZW46IGEzNDdjYmMxLWE1MDMtYTRiMi1hNDBmLWQ5ZTNkZDg2YTc5NycgXA0KICAtSCAneC1yZXF1ZXN0ZWQtd2l0aDogWCcgXA0KICAtZCAnew0KICAiQ29tcGFueUNvZGUiOiAiODcwMSIsDQogICJQdXJjaGFzZU9yZGVyVHlwZSI6ICJOQiIsDQogICJTdXBwbGllciI6ICI3MDAwMDAwMDAxIiwNCiAgDQogICJQdXJjaGFzaW5nT3JnYW5pemF0aW9uIjogIjg3MDEiLA0KICAiUHVyY2hhc2luZ0dyb3VwIjogIjg3MSIsDQogICJQdXJjaGFzZU9yZGVyRGF0ZSI6ICIvRGF0ZSgxNjA2MzQ4ODAwMDAwKS8iLA0KICAiRG9jdW1lbnRDdXJyZW5jeSI6ICJUUlkiLA0KICAidG9fUHVyY2hhc2VPcmRlckl0ZW0iOiB7DQogICAgInJlc3VsdHMiOiBbDQogICAgICB7DQogICAgICAgICJQdXJjaGFzZU9yZGVySXRlbVRleHQiOiAiTGFwdG9wIGZyb20gdGhlIGFwaSIsDQogICAgICAgICJQdXJjaGFzZU9yZGVySXRlbUNhdGVnb3J5IjogIjAiLA0KICAgICAgICAiUGxhbnQiOiAiODcwMSIsDQogICAgICAgICJNYXRlcmlhbEdyb3VwIjogIjIyMDEwMSIsDQogICAgICAgICJPcmRlclF1YW50aXR5IjogIjEwIiwNCiAgICAgICAgIlB1cmNoYXNlT3JkZXJRdWFudGl0eVVuaXQiOiAiRUEiLA0KICAgICAgICAiT3JkZXJQcmljZVVuaXQiOiAiRUEiLA0KICAgICAgICAiTmV0UHJpY2VBbW91bnQiOiAiMTAwIiwNCiAgICAgICAgIk5ldFByaWNlUXVhbnRpdHkiOiAiMSIsDQogICAgICAgICJBY2NvdW50QXNzaWdubWVudENhdGVnb3J5IjogIksiLA0KICAgICAgICAiTXVsdGlwbGVBY2N0QXNzZ210RGlzdHJpYnV0aW9uIjogIiIsDQogICAgICAgICJQcm9kdWN0VHlwZSI6ICIxIiwNCg0KICAgICAgICAidG9fQWNjb3VudEFzc2lnbm1lbnQiOiB7DQogICAgICAgICAgInJlc3VsdHMiOiBbDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICJRdWFudGl0eSI6ICIxMCIsDQogICAgICAgICAgICAgICJDb3N0Q2VudGVyIjogIjg3MDEwMTAwMDIiLA0KCSAgICAgICJHTEFjY291bnQiOiAiMDA2MjgwMDUwMSIsDQogICAgICAgICAgICAgICJPcmRlcklEIjogIjIwMDA4MSIsDQogICAgICAgICAgICAgICJXQlNFbGVtZW50IjogIlRSMTAwIg0KICAgICAgICAgICAgfQ0KICAgICAgICAgIF0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIF0NCiAgfQ0KfSc="

how can I read/get file with httpwebrequest not httpclient


Solution

  • Thank you all

    I used httpclient instead of httpwebrequest. And it is solved.