我遇到了一些访问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为我做了。
有谁知道可能导致此错误的原因?
答案 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中。