You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET使用JS实现自动注销时提示Logout资源不存在404错误如何解决

问题原因
  • 你给Logout Action添加了[HttpPost]特性,该接口仅接收POST类型的请求,但你在JS中使用window.location.href跳转属于GET请求,无法匹配到对应Action,因此返回404
  • 你调用@Url.Action时传参错误:该方法第三个参数为路由值对象,传入FormMethod.Post不仅不能指定请求方式,反而会导致生成的URL携带异常参数,进一步影响请求匹配
解决方案

方案1:修改Action允许GET请求(适配自动跳转场景)

直接移除[HttpPost]特性,或额外添加[HttpGet]特性即可:

[Authorize]
[HttpGet]
public ActionResult Logout()
{
    Session.Clear();
    FormsAuthentication.SignOut();
    return RedirectToAction("Index", "Home");
}

同时修正JS代码里Url.Action的调用:

<script type="text/javascript">
    window.setTimeout(function(){
        window.location.href = '@Url.Action("Logout", "Home")';
    }, 5000);
</script>

方案2:保留[HttpPost]限制,JS改为发送POST请求(安全性更高)

如果需要保留POST限制降低CSRF风险,可以用动态提交表单的方式发起请求:

<script type="text/javascript">
    window.setTimeout(function(){
        const form = document.createElement('form');
        form.method = 'post';
        form.action = '@Url.Action("Logout", "Home")';
        // 如果开启了防伪校验,可添加下面这行注入防伪令牌
        // form.innerHTML += '@Html.AntiForgeryToken()';
        document.body.appendChild(form);
        form.submit();
    }, 5000);
</script>

内容的提问来源于stack exchange,提问作者Ronith Roy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:45:02