1

我在访问一个安静的 Web 服务时遇到了一些代码问题。运行此代码,它在 var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 处出错 并且返回的异常是:“System.Net.WebException:远程服务器返回错误:(415)不支持的媒体类型。”

    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" to curl,所以看起来 "application/ json”是正确的值。他也做 --data-binary,我认为 streamWriter 为我做的。

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

4

2 回答 2

3

弄清楚了。

当我做:

        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";

答案是将创建带有身份验证令牌的标头的代码移到设置其他标头的代码上方。

于 2013-05-31T16:43:39.190 回答
0

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

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

于 2013-05-31T15:40:30.573 回答