2013-05-18 15 views
5

Ho un servizio WebAPI che legge i dati pubblicare compresi i dati dei file utilizzandodati postali utilizzando MultipartFormDataContent da HttpClient

HttpContext.Request as key value pairs 
HttpContext.Current.Request["LoadId"] 

Ora sto cercando di scrivere e l'applicazione Console utilizzando HttpClient ma non in grado di farlo funzionare

private static bool AddException(string vin, string loadId, string sessionId) 
     { 
      var client = new HttpClient 
      { 
       BaseAddress = new Uri("url") 
      }; 
      ServicePointManager.ServerCertificateValidationCallback = (s, cert, chain, ssl) => true; 

      const string quickCode = "01-01-1"; 
      const string inspectionType = "Loading"; 
      const string inspectorCode = "001"; 
      const string numberOfImages = "1"; 
      const string imageNumber = "1"; 
      const string exceptionType = "Driver"; 
      const string imageType = "exception"; 
      var date = DateTime.Now.ToString(); 

      var content = new MultipartFormDataContent(); 
      var values = new[] 
        { 
         new KeyValuePair<string, string>("LoadId", loadId), 
         new KeyValuePair<string, string>("VIN", vin), 
         new KeyValuePair<string, string>("SessionId", sessionId), 
         new KeyValuePair<string, string>("QuickCode", quickCode), 
         new KeyValuePair<string, string>("strInspectionType", inspectionType), 
         new KeyValuePair<string, string>("InspectorCode", inspectorCode), 
         new KeyValuePair<string, string>("NoOfImages", numberOfImages), 
         new KeyValuePair<string, string>("Imageno", imageNumber), 
         new KeyValuePair<string, string>("strExceptionType", exceptionType), 
         new KeyValuePair<string, string>("ImageType", imageType), 
         new KeyValuePair<string, string>("DateTimeOffset", date) 
        }; 
      var fileContent = new ByteArrayContent(File.ReadAllBytes(@"C:\Users\Public\Pictures\Sample Pictures\Desert.jpg")); 
      fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") 
      { 
       FileName = "Desert.jpg" 
      }; 
      content.Add(fileContent, "file", "11"); 

      foreach (var keyValuePair in values) 
      { 
       content.Add(new StringContent(keyValuePair.Value), keyValuePair.Key); 
      } 

      var response = client.PostAsync("Exception/AddException", content).Result; 
      var exceptionResult = response.Content.ReadAsAsync<bool>().Result; 

      return exceptionResult; 
     } 

Quanto sopra è il codice. Ma non è in grado di leggere il codice del servizio

non ho alcun controllo su codice di servizio e posso cambiarlo

+0

Non si ottiene alcuna eccezione o alcuna risposta dal server? Hai provato a usare Fiddler per eseguire il debug? –

risposta

0

Hai provato questo codice Post form data along with files to Web Api2. È possibile unire entrambi i blocchi di codice. Funziona perfettamente bene per me.

Web Codice Api per leggere i file

using System.Diagnostics; 
using System.Net; 
using System.Net.Http; 
using System.Threading.Tasks; 
using System.Web; 
using System.Web.Http; 

public class UploadController : ApiController 
{ 
    public async Task<HttpResponseMessage> PostFormData() 
    { 
     // Check if the request contains multipart/form-data. 
     if (!Request.Content.IsMimeMultipartContent()) 
     { 
      throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); 
     } 

     string root = HttpContext.Current.Server.MapPath("~/App_Data"); 
     var provider = new MultipartFormDataStreamProvider(root); 

     try 
     { 
      // Read the form data. 
      await Request.Content.ReadAsMultipartAsync(provider); 

      // This illustrates how to get the file names. 
      foreach (MultipartFileData file in provider.FileData) 
      { 
       Trace.WriteLine(file.Headers.ContentDisposition.FileName); 
       Trace.WriteLine("Server file path: " + file.LocalFileName); 
      } 
      return Request.CreateResponse(HttpStatusCode.OK); 
     } 
     catch (System.Exception e) 
     { 
      return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e); 
     } 
    } 

} 

Web Codice Api di leggere i dati dei moduli

public async Task<HttpResponseMessage> PostFormData() 
{ 
    if (!Request.Content.IsMimeMultipartContent()) 
    { 
     throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); 
    } 

    string root = HttpContext.Current.Server.MapPath("~/App_Data"); 
    var provider = new MultipartFormDataStreamProvider(root); 

    try 
    { 
     await Request.Content.ReadAsMultipartAsync(provider); 

     // Show all the key-value pairs. 
     foreach (var key in provider.FormData.AllKeys) 
     { 
      foreach (var val in provider.FormData.GetValues(key)) 
      { 
       Trace.WriteLine(string.Format("{0}: {1}", key, val)); 
      } 
     } 

     return Request.CreateResponse(HttpStatusCode.OK); 
    } 
    catch (System.Exception e) 
    { 
     return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e); 
    } 
} 
Problemi correlati