2014-03-07 84 views
2

這似乎並不像我想象的那麼容易。我在網上找到了一些解決方案,但他們不適合我。我有一個安裝了Microsoft ASP.Net Web API 2.1 nuget包的ASP.Net MVC 3項目。現在,我希望能夠讀取發佈到web api控制器的數據。發送的數據會有所不同,所以我不能使用強類型的ViewModel。如何在ASP.Net MVC 3 Web API 2.1控制器中讀取POST數據?

這裏是我試過的解決方案:

public void Post([FromBody]string value) 
    { 
     ... 
    } 


    public void Post([FromBody]List<string> values) 
    { 
     ... 
    } 


    public void Post([FromBody]NameValueCollection values) 
    { 
     ... 
    } 

但我的一個或多個值的變量總是空的。我知道然而,所述控制器接收數據,因爲我可以通過訪問(System.Web.HttpContextWrapper)Request.Properties [「MS_HttpContext」]檢查它。的Request.Form。它看起來不像檢索數據的正確方式。應該有一個更清潔的方式。

UPDATE:

這裏是我我發佈的信息:

我從另一個控制器發佈的數據在同一個Web應用程序:

public ActionResult SendEmailUsingService() 
    { 
     dynamic email = new ExpandoObject(); 

     email.ViewName = "EmailTest"; 
     email.From = "[email protected]"; 
     email.To = "[email protected]"; 
     email.Fullname = "John Smith"; 
     email.Url = "www.mysite.com"; 

     IDictionary<string, object> data = email; 

     using (var wb = new WebClient()) 
     { 
      string url = BaseUrlNoTrailingSlash + Url.RouteUrl("DefaultApi", new { httproute = "", controller = "Emailer" }); 
      var response = wb.UploadValues(url, "POST", data.ToNameValueCollection()); 
     } 

     return View(); 
    } 

這裏是什麼我在我的郵政網頁API控制器越來越如果我聲明像這樣的HttpContext的變量:

var httpContext = (System.Web.HttpContextWrapper)Request.Properties["MS_HttpContext"]; 

httpContext.Request.Form = {VIEWNAME = EmailTest &從= FROMADDRESS%40yahoo.com &要=的toAddress%40gmail.com &全名=約翰史密斯+ &地址= www.mysite.com}

httpContext.Request.Form是System.Collections.Specialized.NameValueCollection {} System.Web.HttpValueCollection

+0

你可以添加你如何將數據發佈到API的例子嗎? –

+0

@JonSusiak請在我原來的帖子中查看UPDATE部分。我剛剛添加了你問我的信息。 –

回答

3

我終於找到了答案,我的問題在這裏:

Web API Form Data Collection

的解決方案是使用FormDataCollection:

public void Post([FromBody]FormDataCollection formData) 
    { 
     ... 
    } 
相關問題