2013-05-18 27 views
5

Tôi có một dịch vụ WebAPI mà đọc bài dữ liệu bao gồm dữ liệu tập tin sử dụngbài viết dữ liệu sử dụng MultipartFormDataContent từ HttpClient

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

Bây giờ tôi đang cố gắng để viết và ứng dụng Console sử dụng HttpClient nhưng không thể làm cho nó hoạt

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

Ở trên là mã. Nhưng không có khả năng đọc mã từ các dịch vụ

tôi đã không kiểm soát mã dịch vụ và không thể thay đổi nó

+0

Bạn có nhận được bất kỳ ngoại lệ hoặc bất kỳ trả lời từ máy chủ? Bạn đã thử sử dụng Fiddler để gỡ lỗi chưa? –

Trả lời

0

Bạn có thử mã này ở Post form data along with files to Web Api2. Bạn có thể hợp nhất cả hai khối mã. Nó hoạt động hoàn toàn tốt cho tôi.

Web Api Mã để đọc các 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 Api Mã để đọc dữ liệu mẫu

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); 
    } 
} 
Các vấn đề liên quan