2012-10-30 101 views
7

我所要做的就是,我在给定的URL 凡我JSON看起来像获取(415)不支持的媒体类型错误

{ 
    "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":"[email protected]" 
    }, 
    "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":"" 
} 

而我的功能,发布JSON数据

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(); 
    } 
} 

当我发布时,我得到一个错误

"The remote server returned an error: (415) Unsupported Media Type."

任何人都有想法;我错在哪里?

+0

你有没有得到这个解决?我被困在一个非常类似的问题[我在这里发布](http://stackoverflow.com/questions/14381385/system-net-webexception-when-sending-json-using-post-request-to-a- jira-api) – calebisstupid

回答

12

试试这个:

request.ContentType = "application/json" 
+0

试过但没有运气。感谢回复 – user1785373

+0

如果这不起作用,这意味着服务器端不期待Json,所以问题出在服务器端而不是客户端。 –

+0

对我来说这工作,似乎我不得不指定请求是一个JSON – break7533

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(); 
+0

尝试它,但没有运气。感谢您的答复 – user1785373

0

我改名为我的项目,并更新了所有的在相同的命名空间之后,我得到了完全相同的消息。 我意识到,我还没有更新在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> 
    </...> 
</..> 

希望这有助于任何阅读。

0

这是我的Web API函数创建一个代码,接受JSON数据

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); 
} 
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"; 
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(); 
    } 
0

有关的WebAPI >>如果你是calling this POST method from fiddler,只是在头部添加此线以下。

Content-Type: application/json 
相关问题