ASP.NET Core MVC刷新详情页出现HTTP ERROR 405错误如何解决?
问题原因
405错误的含义是请求方法不被允许,你的问题触发逻辑如下:
- 列表页的Details按钮是
type="submit"的提交按钮,嵌套在method="post"的表单内,点击按钮时会以POST请求调用后端的Details接口,因此首次打开详情页正常。 - 刷新详情页时,浏览器默认会对当前地址发起GET请求,若你的后端Details Action仅标记了
[HttpPost]特性,不支持GET请求,就会返回405错误。
修复方案(推荐第一种,符合HTTP语义)
方案1:将Details按钮改为GET请求的超链接
详情页属于数据查询展示场景,本身就应该用GET请求,修改列表页的Details按钮代码即可:
<!-- 把原来的button submit按钮替换为a标签 --> <a asp-action="Details" asp-route-Id="@obj.Id" class="btn btn-primary mx-2"> <i class="fas fa-list"></i> </a>
同时修改后端Details Action,移除[HttpPost]特性,可显式添加[HttpGet]特性确保支持GET请求。调整后无论是点击跳转还是刷新页面,都是GET请求,不会出现405错误。
方案2:让Details接口同时支持POST和GET请求
如果特殊场景必须保留POST提交的逻辑,只需给后端Details Action同时添加[HttpPost]和[HttpGet]特性即可,刷新时的GET请求也能被正常处理。
注:详情页内部的post表单是为Download、Delete等提交类操作服务的,和详情页本身的加载逻辑无关,无需调整。
内容的提问来源于stack exchange,提问作者Azhar Qureshi
相关产品推荐
相关产品推荐

