【问题标题】:Getting (415) Unsupported Media Type error获取(415)不支持的媒体类型错误
【发布时间】:2012-10-30 13:37:36
【问题描述】:

我必须在给定的 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) Unsupported Media Type。”

任何人都知道它;我哪里弄错了?

【问题讨论】:

标签: c# json http post httpwebrequest


【解决方案1】:

试试这个:

request.ContentType =  "application/json"

【讨论】:

  • 试过了,但没有成功。感谢您的回复
  • 如果这样不行,说明服务端不期待Json,所以问题出在服务端而不是客户端。
  • 对我来说这行得通,看来我必须指定请求是 json
【解决方案2】:

WebAPI >> 如果您是calling this POST method from fiddler,只需在标题中添加以下行。

Content-Type: application/json

【讨论】:

【解决方案3】:

正如其他人回答的那样,问题出在 ContentType 上。应该是“应用程序/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】:

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

    希望这对阅读本文的人有所帮助。

    【讨论】:

      【解决方案5】:

      我不是 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();
      

      【讨论】:

      • 试过了,但没有成功。感谢您的回复
      【解决方案6】:

      这是我为接受 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);   
      }
      

      【讨论】:

        【解决方案7】:

        序列化您要传递的数据并对其进行编码。另外,提一下 req.ContentType = "应用程序/json";

        “martin”代码有效。

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

        【讨论】:

          猜你喜欢
          • 2018-10-13
          • 2018-07-25
          • 2016-09-09
          • 2017-08-28
          • 2021-10-12
          • 2017-10-23
          • 2014-10-02
          • 2014-06-21
          • 2016-09-10
          相关资源
          最近更新 更多