У меня есть код JavaScript, который мне нужно преобразовать в C #. Мой код JavaScript отправляет часть JSON в созданную веб-службу. Этот код JavaScript работает нормально и выглядит следующим образом:
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");
}
Я пытаюсь понять, как преобразовать это в C #. Мое приложение использует .NET 2.0. Насколько я могу судить, мне нужно сделать что-то вроде следующего:
using (WebClient client = new WebClient())
{
string json = "?";
client.UploadString("http://www.mysite.com/1.0/service/action", json);
}
Я немного застрял на этом этапе. Я не уверен, как json
должно выглядеть. Я не уверен, нужно ли мне устанавливать тип контента. Если да, то не знаю, как это сделать. Я тоже видел UploadData
. Итак, я даже не уверен, что использую правильный метод. В некотором смысле моя проблема - это сериализация моих данных.
Может кто-нибудь сказать мне, что мне здесь не хватает?
Спасибо!
WebClient
, но не заработал. Затем я попробовал это решение, и оно сработало отлично. Я использовалUTF8Encoding
вместо этогоASCIIEncoding
для создания байтового массива, потому что я не вижу причин использовать ASCII, который уменьшает доступные символы недопустимым образом. В кодировке ASCII всего 127 символов.На вопрос уже дан ответ, но я думаю, что нашел решение, которое проще и более соответствует заголовку вопроса, вот оно:
var cli = new WebClient(); cli.Headers[HttpRequestHeader.ContentType] = "application/json"; string response = cli.UploadString("http://some/address", "{some:\"json data\"}");
PS: В большинстве реализаций .net, но не во всех, WebClient является IDisposable, поэтому, конечно, лучше использовать для него 'using' или 'Dispose'. Однако в данном конкретном случае в этом нет необходимости .
источник
В следующем примере показано, как отправить JSON на POST с помощью метода 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); }
источник
POST
аргумент, так какUploadString
этот метод неявно используется по умолчанию. Кроме того, вы можете добавить,client.Headers.Add(HttpRequestHeader.Accept, "application/json");
если ожидаетеJSON
возврата.public class WebClient : Component
public class Component : MarshalByRefObject, IComponent, IDisposable