2013-05-28 133 views
4

我遇到一個問題,當上傳文件大小大於100kb時,web api控制器不會被調用。我搜索了一段時間,發現也許我應該在webconfig中設置maxRequestLength。但如何設置它在自己的主機?maxRequestLength in selfhost?文件大小> 100kb不會上傳

客戶端

public async Task<bool> Upload(DeviceFile file,string path) 
{ 
    var formData = new MultipartFormDataContent(); 
    var request = new HttpRequestMessage(); 
    var md5 = new MD5CryptoServiceProvider(); 
    var fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read,bufferSize:4096,useAsync:true); 
    fileStream.Position = 0; 
    var hash = md5.ComputeHash(fileStream); 
    fileStream.Position = 0; 

    formData.Add(
      new StreamContent(fileStream), 
      file.Name, 
      file.Name, 
      new { 
       Info = file.Info, 
      } 
     ); 

    request.Method = HttpMethod.Post; 
    request.Content = formData; 
    request.RequestUri = new Uri(client.BaseAddress,"api/file/"); 

    try 
    { 
     var response = await client.SendAsync(request).ConfigureAwait(false); 
     await response.Content.ReadAsAsync<bool>().ConfigureAwait(false); 
    } 
    catch (Exception ex) 
    { 
     this.logger.Log(ex.ToString(), Category.Info, Priority.None); 
    } 

    return true; 
} 

服務器控制器

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

    var provider = new MultipartFormDataStreamProvider("D:/"); 

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

     // This illustrates how to get the file names. 
     foreach (MultipartFileData file in provider.FileData) 
     { 
      Console.WriteLine(file.Headers.ContentDisposition.FileName); 
      Console.WriteLine("Server file path: " + file.LocalFileName); 
     } 

     foreach (var key in provider.FormData.AllKeys) 
     { 
      foreach (var val in provider.FormData.GetValues(key)) 
      { 
       Console.WriteLine(string.Format("{0}: {1}", key, val)); 
      } 
     } 
     return Request.CreateResponse(HttpStatusCode.OK); 
    } 
    catch (System.Exception e) 
    { 
     return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e); 
    } 
} 

回答