2016-10-31 104 views
2

我有需要的API控制器將接受一個發佈多形式和提取數據出來<formroot> XML標籤(這是高亮)多形式 - 網絡API

我掙扎了ASP.NET MVC項目在得到這個工作的任何幫助,將不勝感激

enter image description here

目前,我已呼籲UploadController控制器,這是代碼我現在有

public class UploadController : ApiController 
{ 
    public async Task<HttpResponseMessage> PostFormData() 
    { 
     if (!Request.Content.IsMimeMultipartContent()) 
     { 
      throw new HttpResponseException(HttpStatusCode.BadRequest); 
     } 

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

     try 
     { 
      //Need to get the data from within the formroot tag 


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

我不確定從formroot獲取數據的最佳方式,如果上述任何代碼不正確,也請原諒我。

+1

你究竟在哪裏卡住?寫POST?控制器?分析消息?你有什麼代碼? –

+0

道歉我的問題是模糊的,我現在編輯和充實 –

+0

它看起來像你想獲取上傳的文件數據?它是否正確? – Hypnobrew

回答

0

裏面的網絡API控制器,你可以通過下面的代碼訪問XML文件: -

HttpPostedFile xmlFile = HttpContext.Current.Request.Files[0]; 

如果您已發佈多個文件,以及相應的計數1 [0]替換的文件或2等 現在可以將文件加載到如下的對象和從中提取所要求的節點,如: -

XmlDocument doc = new XmlDocument(); 
doc.Load(xmlFile.InputStream); 
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable); 
nsmgr.AddNamespace("ab", "www.w3.org/2001/XMLSchema-instance"); 
XmlNode node = doc.SelectSingleNode("//ab:formroot", nsmgr); 

然後,可以執行任何你功能隨節點一起提供。

+0

你先生真棒!讓我到我需要的地方謝謝 –

+0

@Paul Coan乾杯人! –

0

我總是用以下解決方案:

<form action="/Home/Upload" enctype="multipart/form-data" id="upload" method="post"> 
     @Html.AntiForgeryToken() 
     <input type="file" class="file" id="file" name="file" onchange="javascript:upload(this);" /> 
</form> 

PS: 「上傳()」 JavaScript函數使用jQuery的發佈形式。

function upload(obj) { 
    var p = $(obj).parent(); 
    if (p.get(0).tagName != 'FORM') { 
     p = p.parent(); 
    } 
    p.submit(); 
} 

在我的控制器中,我用作模型綁定器「HttpPostedFileBase」。

[HttpPost] 
[ValidateAntiForgeryToken] 
public RedirectResult Upload(HttpPostedFileBase file) 
{ 
    try 
    { 
     //physical path there you will save the file. 
     var path = @"c:\temp\filename.txt"; 
     file.SaveAs(path); 
    } 
    catch (UploadException ex) 
    { 

    } 

    var url = "put here same url or another url"; 

    return RedirectResult(url); 
}