Request.Form пустые данные поста

Пытаетесь использовать Request.Form для получения опубликованной полезной нагрузки, но Request.Form всегда {} пуст?

Вот моя полезная нагрузка:

chromepayload

Но когда я пытаюсь использовать:

var responseBytes = Request.HttpMethod == "POST" ? client.UploadValues(url, Request.Form) : client.DownloadData(url);

Моя полезная нагрузка Request.Form равна нулю.

Весь код С#:

public ActionResult Index(string pathInfo)
{
    var url = Settings.GetValue<string>("QualService") + "/" + pathInfo + "?" + Request.QueryString;

    //Get stuff from the back end
    using (var client = new WebClient())
    {
        client.Headers[HttpRequestHeader.ContentType] = "application/json";
        client.Headers[HttpRequestHeader.Cookie] = Request.Headers["Cookie"];
        client.Headers[HttpRequestHeader.Authorization] = "Basic " +
                                                          Convert.ToBase64String(
                                                              Encoding.UTF8.GetBytes(
                                                                  "x:{0}".Fmt(UserSession.ApiKey)));
        try
        {
            var responseBytes = Request.HttpMethod == "POST" ? client.UploadValues(url, Request.Form) : client.DownloadData(url);

            var result = new ContentResult();
            result.Content = Encoding.UTF8.GetString(responseBytes);
            result.ContentEncoding = Encoding.UTF8;
            result.ContentType = "application/json";
            return result;
        }
        catch(Exception e)
        {
            Logger.Error("Error while proxying to the API:  ", e);
        }
    }

    return Json(false);
}

person allencoded    schedule 01.05.2014    source источник


Ответы (1)


Я бы все упростил. Измените сигнатуру метода действия:

[HttpPost]
public ActionResult Index(string pathInfo, string Id, string Name, int ProjectId)
{
    // ID, Name and ProjectId will be populated with the values in the payload.
    // ... Rest of code.

}

Указание [HttpPost] поможет вам здесь, так как связыватель модели MVC (класс, отвечающий за получение данных, например, из Request.Form) будет заполнять значения параметров, сопоставляя их имена с данными в Request.Form.

Обратите внимание: я не знаю, является ли Id числом или строковым значением. Если это число, то вам нужно

[HttpPost]
public ActionResult Index(string pathInfo, int? Id, string Name, int ProjectId)
{

В этом случае Id является целым числом, допускающим значение NULL.

person Jason Evans    schedule 01.05.2014
comment
Я думаю, что нашел проблему. Application/json — это сообщение. - person allencoded; 01.05.2014
comment
Как вы делаете запрос POST через $.ajax()? Возможно, вам придется изменить значение contentType в соответствии с вашими потребностями. - person Jason Evans; 01.05.2014
comment
$http angular он автоматически дает вам приложение contentType/json - person allencoded; 01.05.2014
comment
Можете ли вы опубликовать код кода Angular $http, пожалуйста? - person Jason Evans; 01.05.2014