【发布时间】:2017-09-14 02:56:01
【问题描述】:
我的双手举在空中——我哭了,叔叔。帮助我理解:
我写了一个简单的 HttpWebRequest 发布到客户的https://website。 它具有特定的标头要求和 JSON 请求正文。 GetResponseStream 在收到 GetResponse StatusCode.OK 后,是他们的服务器提供的错误。他们检查了他们的日志并说当标头存在时,请求正文是“。
这是我的代码:
public const string API_URILogin = "https://dev.clientURL.com/test/api/login";
private void RequestTest()
{
LoginAPIStruct loginInfo = new LoginAPIStruct();
loginInfo.loginId = TestId;
loginInfo.password = TestPw;
loginInfo.vehicleType = "E";
loginInfo.deviceId = "ABCDEF";
loginInfo.clientId = "123456";
loginInfo.appVersion = string.Empty;
loginInfo.osType = string.Empty;
loginInfo.osVersion = string.Empty;
// Call LoginAPI
string loginStatus = LoginAPI(loginInfo);
//Display Results
lblResults.Text = loginStatus;
}
// Public Variables
public static string errorMessage;
// ** Client Login **
public static string LoginAPI(LoginAPIStruct loginInfo)
{
// Post Login to Client. Get response with Vehicle structure.
string loginInfoSerialized = string.Empty;
string returnString = string.Empty;
loginInfoSerialized = new JavaScriptSerializer().Serialize(loginInfo);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(API_URILogin);
request.Method = "POST";
request.ContentType = "application/json";
request.Headers.Add("From", "CC");
request.Headers.Add("Language", "0");
request.Headers.Add("Offset", "-8");
request.Headers.Add("To", "CCM");
// Post Request
using (StreamWriter streamPost = new StreamWriter(request.GetRequestStream()))
{
streamPost.Write(loginInfoSerialized);
}
// Get Response
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
// Status Okay.
//string responseStatusDescription = response.StatusDescription;
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
try
{
var result = streamReader.ReadToEnd();
returnString = result;
}
catch (Exception ex)
{
returnString = ex.Message;
}
}
}
else
{
returnString = response.StatusCode.ToString();
}
return returnString;
} // end LoginAPI
我的 JSON 字符串似乎有效 - 我将其粘贴到 Fiddler 中,同时设置了标头,Fiddler 返回成功登录。
从 ASP.Net,它返回他们记录的错误,即需要电子邮件地址 (loginId)。我在我的 C# 代码中没有看到任何不正确的地方。还有什么想法可以看吗?客户是否可以在其托管站点上阻止或过滤掉某个请求?我被困住了。
【问题讨论】:
-
更新:我找到了如何配置 ASP.net 让 Fiddler 充当代理。 GlobalProxySelection.Select = new WebProxy("127.0.0.1", 8888);我看到了我的标题,但 Content-Length 设置为 0 并且没有发送任何内容。为什么?