我正在用c#代码调用WebAPI
方法,我得到了:
远程服务器返回错误403 forbidden
在本地计算机中,它运行良好,在我的开发服务器中,我收到403 forbidden
错误。
WebClient wc = new WebClient();
string url = string.Empty;
if (Tag == "L") {
url = ConfigurationSettings.AppSettings["MajraApi"].ToString();
}
var httpWebRequest = (HttpWebRequest) WebRequest.Create(url);
wc.UseDefaultCredentials = true;
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
using(var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) {
string json1 = "Some JSON String";
streamWriter.Write(json1);
streamWriter.Flush();
streamWriter.Close();
}
httpWebRequest.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
var httpResponse = (HttpWebResponse) httpWebRequest.GetResponse();
using(var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
}
答案 0 :(得分:1)
您可能已设置身份验证以连接到生产中的服务器,因此您必须定义凭据以允许访问API。您不能保留默认凭据System.Net.CredentialCache.DefaultCredentials
。
通过更改IIS中定义的userName
和password
来替换第14行:
httpWebRequest.Proxy.Credentials = new NetworkCredential() {
UserName = "userName";
Password = "password";
Domain = "mydomain"; // facultative
};
答案 1 :(得分:0)
使用DefaultCredentials发送请求时,表示当前用户,即执行应用程序的用户。在可能是您的域用户的本地计算机上,在您的开发服务器上,它是为应用程序池设置的用户 - 可能没有您尝试呼叫的API的权限。
答案 2 :(得分:0)
您是否已将IIS,WebApi服务.NET CLR版本的应用程序池设置为:
无托管代码
此外,您是否根据需要将webapi文件夹的wwwroot授予用户IIS_IUSRS读取和写入权限,甚至授予修改权限(甚至完全控制权限)。还要为NETWORK SERVICE添加权限。
同时检查一下: IIS_IUSRS and IUSR permissions