System.Net.WebException:远程服务器返回错误:(415)UNSUPPORTED MEDIA TYPE

时间:2013-05-31 15:32:42

标签: c# json rest

我遇到了一些访问restful web服务的代码问题。 运行此代码,它在var httpResponse =(HttpWebResponse)httpWebRequest.GetResponse();返回的异常是:“System.Net.WebException:远程服务器返回错误:(415)UNSUPPORTED MEDIA TYPE。”

    public bool CreateAccount(string myUsername, string url, string authtoken) {
        try {
            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
            httpWebRequest.ContentType = "application/json";
            httpWebRequest.MediaType="application/json";
            httpWebRequest.Accept="application/json";
            httpWebRequest.Method = "POST";

            WebHeaderCollection headers = new WebHeaderCollection();
            headers.Add("Authorization: Token"+authtoken);
            httpWebRequest.Headers = headers;

            using (StreamWriter streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) {
                streamWriter.Write("{username : '"+myUsername+"'}");
            }

            var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); // Fails on this line.
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) {
                JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
                string json = streamReader.ReadToEnd();
            }
            return true;

        } catch (WebException e) {
            throw e;
            return false;
        }
        //return true;
    }

我已经为ContentType,MediaType和Accept尝试了各种各样的东西,但是服务开发人员给我的工作示例提供了-H“Content-Type:application / json”来卷曲,所以看起来似乎“application / json”是正确的值。他也做了--data-binary,我假设streamWriter为我做了。

有谁知道可能导致此错误的原因?

2 个答案:

答案 0 :(得分:2)

想出来。

当我这样做时:

        WebHeaderCollection headers = new WebHeaderCollection();
        headers.Add("Authorization: Token "+authtoken);
        httpWebRequest.Headers = headers;

我意外地吹走了通过执行创建的所有现有标头:

        httpWebRequest.ContentType = "application/json";
        httpWebRequest.MediaType="application/json";
        httpWebRequest.Accept="application/json";
        httpWebRequest.Method = "POST";

答案是移动我创建标题的代码,在我设置其他标题的代码上方使用auth标记。

答案 1 :(得分:0)

此错误的一个已知原因是服务文件和配置文件中的服务名称不匹配。那就是您的服务名称和配置服务名称与“

不匹配

右键单击解决方案资源管理器中的.svc文件,然后选择“查看标记”并将正确的服务名称粘贴到.config中。