Mam kod JavaScript, który muszę przekonwertować na C #. Mój kod JavaScript wysyła kod JSON do utworzonej usługi internetowej. Ten kod JavaScript działa dobrze i wygląda następująco:
var vm = { k: "1", a: "2", c: "3", v: "4" };
$.ajax({
url: "http://www.mysite.com/1.0/service/action",
type: "POST",
data: JSON.stringify(vm),
contentType: "application/json;charset=utf-8",
success: action_Succeeded,
error: action_Failed
});
function action_Succeeded(r) {
console.log(r);
}
function log_Failed(r1, r2, r3) {
alert("fail");
}
Próbuję dowiedzieć się, jak przekonwertować to na C #. Moja aplikacja korzysta z platformy .NET 2.0. Z tego, co wiem, muszę zrobić coś takiego:
using (WebClient client = new WebClient())
{
string json = "?";
client.UploadString("http://www.mysite.com/1.0/service/action", json);
}
Trochę utknąłem w tym momencie. Nie jestem pewien, jak json
powinno wyglądać. Nie jestem pewien, czy muszę ustawić typ zawartości. Jeśli tak, nie wiem, jak to zrobić. Widziałem też UploadData
. Nie jestem więc pewien, czy używam właściwej metody. W pewnym sensie moim problemem jest serializacja moich danych.
Czy ktoś może mi powiedzieć, czego tu brakuje?
Dziękuję Ci!
WebClient
i nie udało mi się to. Potem wypróbowałem to rozwiązanie i zadziałało jak urok. UżywałemUTF8Encoding
zamiastASCIIEncoding
stworzyć tablicę bajtów, dlatego nie widzę powodu, aby używać ASCII, co zmniejsza dostępne znaki w sposób, który jest nie do zaakceptowania. ASCII ma tylko 127 znaków w zestawie znaków.Na to pytanie już udzielono odpowiedzi, ale myślę, że znalazłem rozwiązanie, które jest prostsze i bardziej odpowiednie do tytułu pytania, oto jest:
var cli = new WebClient(); cli.Headers[HttpRequestHeader.ContentType] = "application/json"; string response = cli.UploadString("http://some/address", "{some:\"json data\"}");
źródło
Poniższy przykład ilustruje sposób POST a JSON za pośrednictwem metody WebClient.UploadString :
var vm = new { k = "1", a = "2", c = "3", v= "4" }; using (var client = new WebClient()) { var dataString = JsonConvert.SerializeObject(vm); client.Headers.Add(HttpRequestHeader.ContentType, "application/json"); client.UploadString(new Uri("http://www.contoso.com/1.0/service/action"), "POST", dataString); }
źródło
POST
argument, ponieważUploadString
niejawnie używa tej metody jako domyślnej. Ponadto możesz chcieć dodać,client.Headers.Add(HttpRequestHeader.Accept, "application/json");
jeśli spodziewasz sięJSON
zwrotu.public class WebClient : Component
public class Component : MarshalByRefObject, IComponent, IDisposable