В ASP.NET MVC
можно получить доступ к данным формы post:
var thisData = Request.Form["this.data"];
Возможно ли достичь той же функциональности в Web API
ApiController?
В ASP.NET MVC
можно получить доступ к данным формы post:
var thisData = Request.Form["this.data"];
Возможно ли достичь той же функциональности в Web API
ApiController?
Веб-API ASP.NET стал значительно более надежным в работе с различными сценариями HTTP, особенно потоковыми. Так как только форматы медиафайлов обычно касаются содержимого и должны согласовывать содержимое.
В ASP.NET MVC тип содержимого application/x-www-form-urlencoded
является гражданином первого класса (и рассматривается особенно потому, что это тип контента 95% запросов POST), и мы имеем FormsCollection
для предоставления доступа к словарю в доступе, когда он определяется как входной параметр.
В веб-API ASP.NET application/x-www-form-urlencoded
является еще одним типом содержимого и должен быть прочитан его MediaTypeFormatter. Поскольку такой веб-API ASP.NET не может делать никаких предположений о 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"
};
}
}
Но я не уверен, что это лучший способ сделать такие вещи.
В качестве альтернативы методу Aliostad можно:
public void Post(HttpRequestMessage request)
{
NameValueCollection formData = await request.Content.ReadAsFormDataAsync();
}
Попробуйте следующее:
HttpContext.Current.Request.Form["key"];