2013-05-18 13 views
5

Mam usługi WebAPI który odczytuje danych post w tym danych plik używającdane Post używając MultipartFormDataContent z HttpClient

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

Teraz staram się pisać i aplikacji konsoli przy użyciu HttpClient ale nie jest w stanie zrobić to praca

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; 
     } 

Powyższy kod. Ale nie jest w stanie odczytać kodu z serwisu

I nie mają kontroli nad kodu serwisowego i nie mogę go zmienić

+0

Czy masz żadnego wyjątku ani żadnej odpowiedzi z serwera? Czy próbowałeś używać Fiddlera do debugowania? –

Odpowiedz

0

Czy spróbować ten kod na Post form data along with files to Web Api2. Możesz połączyć oba bloki kodu. Działa to doskonale dla mnie.

Kod Web API do odczytu plików

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); 
     } 
    } 

} 

Kod Web API do odczytu danych z formularzy

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); 
    } 
}