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

ASP.NET Core MVC中FormMethod.Get结合Html.BeginForm报HTTP 405错误

问题解决指南

先搞定405错误:请求方法不匹配是核心

你控制器方法标了[HttpPost],但表单用的是FormMethod.Get,这俩完全不搭,服务器直接返回405(方法不允许)。得按需求选一种:

  • 推荐:用Get做搜索(符合搜索功能的常规设计,用户能收藏、分享搜索链接):
    1. 把控制器上的[HttpPost]和[ValidateAntiForgeryToken]全删掉,要么换成[HttpGet],要么啥也不标(默认就是Get)。
    2. 表单保留FormMethod.Get,同时删掉视图里的@Html.AntiForgeryToken()——防伪造令牌是给Post/Put这类修改数据的请求用的,Get请求根本不需要。
  • 非要用Post的话(不推荐):
    1. 把表单的FormMethod.Get改成FormMethod.Post。
    2. 立刻删掉嵌套的<form>标签!HTML不允许表单嵌套,这会导致浏览器解析混乱,不仅生成重复令牌,还会让表单行为异常。

干掉重复的__RequestVerificationToken

  1. 别手动加@Html.AntiForgeryToken():如果用Post,Html.BeginForm配合控制器的[ValidateAntiForgeryToken]会自动生成令牌,手动加就会重复。
  2. 彻底清理嵌套表单:只要页面里有嵌套的<form>,就肯定出问题,必须保证每个表单都是独立的,没有层级嵌套。

给你个正确的Get搜索示例:

控制器代码

public IActionResult Search(string searchQuery)
{
    // 这里写你的搜索逻辑
    return View();
}

视图代码

@using (Html.BeginForm("Search", "YourControllerName", FormMethod.Get))
{
    <input type="text" name="searchQuery" placeholder="输入关键词" />
    <button type="submit">搜索</button>
}

这样改完,405错误和重复令牌的问题都能解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:02:10