在ASP.NET MVC
,一臺可以上網的形式發佈數據:有沒有辦法在Web Api控制器中處理表單發佈數據?
var thisData = Request.Form["this.data"];
是否有可能實現一個Web API
ApiController相同的功能?
在ASP.NET MVC
,一臺可以上網的形式發佈數據:有沒有辦法在Web Api控制器中處理表單發佈數據?
var thisData = Request.Form["this.data"];
是否有可能實現一個Web API
ApiController相同的功能?
ASP.NET Web API在處理不同的HTTP場景(尤其是流媒體)方面變得更加健壯。因爲只有媒體類型的格式化程序通常會觸及內容並且必須使內容保持一致。
在ASP.NET MVC,application/x-www-form-urlencoded
內容類型是一等公民(特別是治療,因爲這是對POST請求的95%的內容類型),我們有FormsCollection
提供接入字典訪問,每當它被定義爲輸入參數。
在ASP.NET Web API中,application/x-www-form-urlencoded
是另一種內容類型,應該由其MediaTypeFormatter讀取。由於此類ASP.NET Web API無法對Forms
進行任何假設。
ASP.NET Web API中的常規方法是將窗體表示爲模型,以便媒體類型格式化程序對其進行反序列化。另一種方法是定義動作的參數爲NameValueCollection
:
public void Post(NameValueCollection formData)
{
var value = formData["key"];
}
嗯,這是不可能的,因爲HttpRequestMessage
不提供該類型的集合開箱。
但是,如果你的應用ASP.NET主持下,你可以得到當前HttpContext
對象,並從那裏得到的表單值:
public class CarsController : ApiController {
public string[] Get() {
var httpContext = (HttpContextWrapper)Request.Properties["MS_HttpContext"];
var foo = httpContext.Request.Form["Foo"];
return new string[] {
"Car 1",
"Car 2",
"Car 3"
};
}
}
但我不知道這是最好的方法做這種東西。
它不適合我。在'foo'中返回null。 – 2014-02-18 13:17:45
作爲替代Aliostad的方法,可以這樣做:
public void Post(HttpRequestMessage request)
{
NameValueCollection formData = await request.Content.ReadAsFormDataAsync();
}
試試這個:
HttpContext.Current.Request.Form["key"];
HttpContext在WebApi應用程序中不可用。 – McGuireV10 2017-12-16 21:02:52
假設你有被稱爲是一些值,有的認爲是動態的。是否有一種方法可以爲已知模型指定模型類型,並將其餘部分放在集合中。像這樣:'公共無效後(PostData模型,NameValueCollection formData)'? – 2014-03-14 19:50:09
使用NameValueCollection對我不起作用,但它與FormDataCollection – Pyfhon 2016-11-30 09:36:05
一起使用NameValueCollection對我也不起作用。我使用FormDataCollection作爲@Pyfhon。 – avidProgrammer 2017-02-19 16:36:04