PostAsync 导致页面刷新
PostAsync is causing the page to refresh
加载时,我的登录页面确定查询参数是否为空。如果是,它会重定向到另一个页面,然后重定向回登录,但会提供查询参数。看起来像这样:
protected void Page_Load(object sender, EventArgs e) {
if (Request.Params["code"] == null) {
var authCodeUrl = ConfigurationManager.AppSettings["MyId.AuthCodeUrl"];
Response.Redirect(authCodeUrl);
}
else {
var code = Request.Params["code"];
GetAuthResult(code);
}
}
GetAuthResult
在 return 重定向后触发。在其中,它将 POST 发送到单独的 API 并期望获得 return 结果:
using (var client = new HttpClient()) {
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
var response = client.PostAsync(accessTokenUrl, new FormUrlEncodedContent(bodyData)).Result;
if (!response.IsSuccessStatusCode) {
throw new Exception("MyID auth failed", new Exception(response.ReasonPhrase));
}
var token = response.Content.ReadAsStringAsync().Result;
return JsonConvert.DeserializeObject<MyIdAuthResult>(token);
}
您可以在下面的 GIF 中看到它的发生。当我越过第 43 行时,我希望检查第 44 行的结果。除了 Page_Load
再次触发。知道我做错了什么吗?
事实证明发生了错误,但由于我没有 try catch,页面似乎只是在刷新。实际问题是我访问的端点是 HTTPS,而框架版本试图使用 TLS 1.0。这可能不是最好的解决方案,但我在实例化 HttpClient 之前设置了安全协议并且它起作用了:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
加载时,我的登录页面确定查询参数是否为空。如果是,它会重定向到另一个页面,然后重定向回登录,但会提供查询参数。看起来像这样:
protected void Page_Load(object sender, EventArgs e) {
if (Request.Params["code"] == null) {
var authCodeUrl = ConfigurationManager.AppSettings["MyId.AuthCodeUrl"];
Response.Redirect(authCodeUrl);
}
else {
var code = Request.Params["code"];
GetAuthResult(code);
}
}
GetAuthResult
在 return 重定向后触发。在其中,它将 POST 发送到单独的 API 并期望获得 return 结果:
using (var client = new HttpClient()) {
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
var response = client.PostAsync(accessTokenUrl, new FormUrlEncodedContent(bodyData)).Result;
if (!response.IsSuccessStatusCode) {
throw new Exception("MyID auth failed", new Exception(response.ReasonPhrase));
}
var token = response.Content.ReadAsStringAsync().Result;
return JsonConvert.DeserializeObject<MyIdAuthResult>(token);
}
您可以在下面的 GIF 中看到它的发生。当我越过第 43 行时,我希望检查第 44 行的结果。除了 Page_Load
再次触发。知道我做错了什么吗?
事实证明发生了错误,但由于我没有 try catch,页面似乎只是在刷新。实际问题是我访问的端点是 HTTPS,而框架版本试图使用 TLS 1.0。这可能不是最好的解决方案,但我在实例化 HttpClient 之前设置了安全协议并且它起作用了:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;