Как вызвать метод PUT REST WCF из C # - PullRequest
0 голосов
/ 13 февраля 2012

мы создали службу REST (которая должна вызываться с помощью запроса PUT. Нам удалось вызвать сервис с HTML-страницы с помощью Jquery (см. Ниже), но почему-то нам не удалось сделать это из C #. «Обычный» веб-запрос просто не работает.

Должна ли быть возможность выдать запрос PUT из веб-запроса, и если да, как мы помещаем данные PUT в запрос?

Код jquery:

$("#PutUpdatePassword").on("click", function () {
            var data = {
                userId: "9769595975",
                Passold: "qwert1",
                Passnew: "qwert2"
            };
            var json = { 'updatePassword': data };
            $.ajax({
                type: "PUT",
                url: baseUrl + "/profile/190/updateprofile",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                data: JSON.stringifyWcf(json),
                success: function () {
                    alert("Ok!");
                },
                error: function () {
                    alert("Fail!");
                }
            });
        });

Ответы [ 2 ]

4 голосов
/ 13 февраля 2012
var request = WebRequest.Create("http://example.com/profile/190/updateprofile");
request.Method = "PUT";
request.ContentType = "application/json; charset=utf-8";
using (var writer = new StreamWriter(request.GetRequestStream()))
{
    var serializer = new JavaScriptSerializer();
    var payload = serializer.Serialize(new 
    {
        UserId = "9769595975",
        Passold = "qwert1",
        Passnew = "qwert2"
    });
    writer.Write(payload);
}

using (var response = request.GetResponse())
using (var reader = new StreamReader(response.GetResponseStream()))
{
    string result = reader.ReadToEnd();
    // do something with the results
}
0 голосов
/ 28 августа 2014

Проверьте это используя REST api ---

try
        {
            var pl= new payLoad(){ UserId = "9769595975",Passold = "qwert1",Passnew ="qwert2"};
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(payLoad));
            MemoryStream mem = new MemoryStream();
            //serializing payload
            ser.WriteObject(mem, pl);
            string pycontent = Encoding.UTF8.GetString(mem.ToArray(), 0, (int)mem.Length);
            HttpContent pyContentPost = new System.Net.Http.StringContent(pycontent, Encoding.UTF8, "application/json");

            using (var client = new HttpClient())
            {
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                HttpResponseMessage response = client.PutAsync(baseUrl+ "/profile/190/updateprofile", pyContentPost).Result;
                var result = response.Content.ReadAsStringAsync().Result;
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    throw new WebFaultException<string>("HttpException occured :",HttpStatusCode.InternalServerError);
                }
                return Convert.ToInt32(result);//return result 
            }
        }
        catch (HttpRequestException ex)
        {
            throw new WebFaultException<string>(string.Format("Service Exception occured : {0}", ex.Message), HttpStatusCode.BadRequest);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...