Чтение запроса PUT Body - PullRequest
5 голосов
/ 16 июня 2011

Я чертовски долго пытался выяснить, почему эта же строка возвращает тело запроса в виде строки в Post () и пустую строку в Put () и, в конечном итоге, как получить тело запроса в Put ().

[HttpPost]
public JsonResult Post()
{
    ...
    var todoJson = new StreamReader(Request.InputStream).ReadToEnd();
    ...
}

[HttpPut]
public JsonResult Put(int id)
{
    ...
    var todoJson = new StreamReader(Request.InputStream).ReadToEnd();
    ...

}

На основании ((System.Web.HttpInputStream)(Request.InputStream))._data._data, который я получил в Put (), значения байтов находятся в теле запроса, однако мне не удается извлечь содержимое.Любая помощь очень ценится.

Редактировать: метод из HttpRequest.InputStream документация работает в Post (), в Put () возвращает строку "\ 0 \ 0 \ 0 \ 0 \0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 ... "Content-Length.

Ответы [ 2 ]

11 голосов
/ 16 июня 2011

Я должен был видеть это раньше Request.InputStream.Position указывает на конец тела запроса, поэтому

Request.InputStream.Position = 0;

исправляет проблему.

0 голосов
/ 16 июня 2011

Вероятно, это потому, что HTTP Put не поддерживается браузерами широко, как упоминалось в публикации SO: Выполнение HTTP PUT из браузера .Вы, вероятно, лучше всего придерживаетесь GET и POST для максимальной совместимости.Однако я слышал о коде, который может использовать необработанный HttpWebRequest для выполнения пута, такой как , обозначенный здесь Джейсоном ДеФонтесом в этом посте:

        string json = "...";
        byte[] arr = System.Text.Encoding.UTF8.GetBytes(xml);
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost/");
        request.Method = "PUT";
        request.ContentType = "application/json";
        request.ContentLength = arr.Length;
        Stream dataStream = request.GetRequestStream();
        dataStream.Write(arr, 0, arr.Length);
        dataStream.Close();
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        string returnString = response.StatusCode.ToString();
        Console.WriteLine(returnString);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...