我要做的是我必须在给定的URL中发布JSON数据 我的JSON看起来像
{
"trip_title":"My Hotel Booking",
"traveler_info":{
"first_name":"Edward",
"middle_name":"",
"last_name":"Cullen",
"phone":{
"country_code":"1",
"area_code":"425",
"number":"6795089"
},
"email":"asdv@gmail.com"
},
"billing_info":{
"credit_card":{
"card_number":"47135821",
"card_type":"Visa",
"card_security_code":"123",
"expiration_month":"09",
"expiration_year":"2017"
},
"first_name":"Edward",
"last_name":"Cullen",
"billing_address":{
"street1":"Expedia Inc",
"street2":"108th Ave NE",
"suite":"333",
"city":"Bellevue",
"state":"WA",
"country":"USA",
"zipcode":"98004"
},
"phone":{
"country_code":"1",
"area_code":"425",
"number":"782"
}
},
"marketing_code":""
}
我的功能
string message = "URL";
_body="JSON DATA";
HttpWebRequest request = HttpWebRequest.Create(message) as HttpWebRequest;
if (!string.IsNullOrEmpty(_body))
{
request.ContentType = "text/json";
request.Method = "POST";
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
streamWriter.Write(_body);
streamWriter.Flush();
streamWriter.Close();
}
}
using (HttpWebResponse webresponse = request.GetResponse() as HttpWebResponse)
{
using (StreamReader reader = new StreamReader(webresponse.GetResponseStream()))
{
string response = reader.ReadToEnd();
}
}
当我发布它时;我收到了错误
“远程服务器返回错误:(415)不支持的媒体类型。”
任何人都有这个想法;我错的地方?
答案 0 :(得分:19)
试试这个:
request.ContentType = "application/json"
答案 1 :(得分:2)
对于WebAPI >>如果您是calling this POST method from fiddler
,只需在标题中添加以下行。
Content-Type: application/json
答案 2 :(得分:1)
我重命名了我的项目并更新了所有名称空间以进行关联,之后我得到了完全相同的消息。 我意识到我没有更新web.config(名称和合同)中的命名空间:
<system.serviceModel>
<services>
<service name="X.Y.Z.Authentication" behaviorConfiguration="ServiceBehaviour">
<endpoint address="" binding="webHttpBinding" contract="X.Y.Z.IAuthentication" behaviorConfiguration="web" bindingConfiguration="defaultRestJsonp"></endpoint>
</service>
</...>
</..>
希望这有助于任何人阅读此内容。
答案 3 :(得分:1)
正如其他人所回答的那样,问题在于ContentType。应该是'application / json'。
以下是旧WebRequest
的示例var parameters = Newtonsoft.Json.JsonConvert.SerializeObject(obj);
var req = WebRequest.Create(uri);
req.Method = "POST";
req.ContentType = "application/json";
byte[] bytes = Encoding.ASCII.GetBytes(parameters);
req.ContentLength = bytes.Length;
using (var os = req.GetRequestStream())
{
os.Write(bytes, 0, bytes.Length);
os.Close();
}
var stream = req.GetResponse().GetResponseStream();
if (stream != null)
using (stream)
using (var sr = new StreamReader(stream))
{
return sr.ReadToEnd().Trim();
}
return "Response was null";
答案 4 :(得分:0)
我不是100%肯定,但我猜你必须将文本作为byteArray发送,试试这个:
req = (HttpWebRequest)HttpWebRequest.Create(uri);
req.CookieContainer = cookieContainer;
req.Method = "POST";
req.ContentType = "text/json";
byte[] byteArray2 = Encoding.ASCII.GetBytes(body);
req.ContentLength = byteArray2.Length;
Stream newStream = req.GetRequestStream();
newStream.Write(byteArray2, 0, byteArray2.Length);
newStream.Close();
答案 5 :(得分:0)
这是我为接受json数据的web api函数创建的代码示例
string Serialized = JsonConvert.SerializeObject(jsonData);
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpContent content = new StringContent(Serialized, Encoding.Unicode, "application/json");
var response = await client.PostAsync("http://localhost:1234", content);
}
答案 6 :(得分:0)
序列化您要传递的数据并对其进行编码。另外,提一下 req.ContentType =“application / json”;
“马丁”代码有效。
LoginInfo obj = new LoginInfo();
obj.username = uname;
obj.password = pwd;
var parameters = Newtonsoft.Json.JsonConvert.SerializeObject(obj);
var req = WebRequest.Create(uri);
req.Method = "POST";
req.ContentType = "application/json";
byte[] bytes = Encoding.ASCII.GetBytes(parameters);
req.ContentLength = bytes.Length;
using (var os = req.GetRequestStream())
{
os.Write(bytes, 0, bytes.Length);
os.Close();
}
var stream = req.GetResponse().GetResponseStream();
if (stream != null)
using (stream)
using (var sr = new StreamReader(stream))
{
return sr.ReadToEnd().Trim();
}