我有一个使用 .NET Framework 4.7.2 的 ASP.NET 应用程序。它有一个模式弹出窗口,供用户输入一些注释,然后保存。用户有时会使用显示弹出窗口的按钮并输入由于身份验证已过期而在回发时被拒绝的注释。我想在弹出窗口时快速检查身份验证,所以我想尝试 .ashx 页面 我从 chatGPT 得到了这个代码:
$.ajax({
url: 'yourHandler.ashx',
type: 'GET', // or 'POST'
success: function(response) {
// Do something with the response
console.log(response);
},
error: function(xhr, status, error) {
// Handle any errors
console.error(error);
}
});
这会给我一个 302 返回到我的 default.aspx 。有一个更好的方法吗?我可以用代码或配置修复 302 吗?我想知道是否需要在某个地方注册 ashx。
TIA,我的 ASP.NET 编程技能有限:-)
那么,如果您在网页上,并且不希望会话过期?
只需向现有页面添加一个简单的 Web 方法,然后触发 JavaScript 计时器来调用一些“虚拟”Web 方法。
我的意思是,要么让会话过期,要么不过期。因此,您可以根据需要使页面保持活动状态。或者,当用户执行某些需要服务器端代码的操作时,他们将再次收到登录提示。
因此,假设您有 jQuery,那么在您的标记中,您可以说触发对网页的简单小请求。只要他们在该网页上,他们的会话就永远不会超时。
因此,说这个 JavaScript/jQuery - 您可以将其放在表单的末尾,因此:
<script>
$(window).on('load', function () {
// web page fully loaded
// start a little javascript function to run every 1 minute
setTimeout(MyTickTok(), 60000)
})
function MyTickTok() {
// any web method call re-sets session time out.
$.ajax({
type: "POST",
url: '<%= ResolveUrl("~/Test/TableMunch.aspx/TickTock") %>',
data: {},
contentType: "application/json; charset=utf-8",
datatype: "json",
success: function (data) {
setTimeout(MyTickTok, 60000) // 90 seconds
},
error: function (request, status, error) {
var r = request.responseText
var errorMessage = r.Message
console.log(error)
}
});
}
</script>
以及该网页的代码隐藏,只需添加一个 Web 方法,例如:
(导入系统.Web.服务)
<WebMethod>
Public Shared Function TickTock() As String
Return "hello"
End Function
因此,现在会话不会超时,因为我们每 60 秒“触摸”一次网页。