【发布时间】:2018-09-19 09:31:38
【问题描述】:
大家好,我正在尝试使用 RestSharp 登录我的 xamarin api,如果身份验证有效,API 应该返回状态码 200 OK,如果身份验证失败(密码错误)和其他代码,则返回状态码,具体取决于案例场景,但是当身份验证通过(状态代码 200 ok)时,我在所有其他案例旁得到状态代码 0,下面的源代码是我的实现方式
//payload am sending to the api
RequestPayload res = new RequestPayload();
res.appid = appid;
res.data = data;
res.method = "Login";
//convert to json object
var MySerializedObject = JsonConvert.SerializeObject(res);
string APIUrl = ""http://142.168.20.15:8021/RouteTask";
//create client
RestClient client = new RestClient(APIUrl);
//create request
RestRequest request = new RestRequest(Method.POST);
// set request headeer
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
//request.AddJsonBody(MySerializedObject); --i have also tried this
request.AddParameter("application/json", MySerializedObject, ParameterType.RequestBody);
request.JsonSerializer.ContentType = "application/json; charset=utf-8";
request.AddParameter("RequestSource", "Web", "application/json", ParameterType.QueryString);
client.Timeout = 2000000;
var response = client.Execute(request); // where the issue appears
//RestResponse response = client.Execute(request); // i have tried this
//IRestResponse response = client.Execute(request); // i have tried this
if (response.IsSuccessful)
{
//use response data
}
在所有场景中,它返回一个 StatusCode: 0, Content-Type: , Content-Length: 0) 和 errorMessage
"获取响应流时出错 (ReadAsync):ReceiveFailure 值 不能为空。参数名称:src"
【问题讨论】:
-
这里有一个类似的问题,可以参考here
-
MonkeySteve,我已经看到了这个问题,但是,解决方案对我不起作用,如果服务器发送任何其他响应,我的问题就会出现 200 OK
-
我遇到了类似的 401 错误问题。如果您为所有异常打开中断,您可以看到在 RestSharp 中抛出了几个,但它们没有冒泡,并且状态代码最终为零。在我的情况下,返回 401 的响应是纯文本“过期”而不是 json,这让我相信它与解析器有关,但它甚至从未命中 OnBeforeDeserialization 方法,因此似乎排除了解析错误.
-
从服务器指示身份验证过期的初始 511 开始,随后的 401 指示我有一个错误的密钥(因为我不知道 511 来了并且需要更新)我得到了同样的错误情况。但是我确实点击了 OnBeforeDeserialization 方法,并且已经抛出异常并且所有响应数据都丢失了,包括标题和状态代码......
标签: c# api xamarin.forms restsharp