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

.NET Web应用集成AWS SNS与DynamoDB时遭遇HTTP Error 405:实际发送GET请求而非预期的POST请求

.NET Web应用集成AWS SNS与DynamoDB时遭遇HTTP Error 405:实际发送GET请求而非预期的POST请求

看起来你已经精准抓到问题核心啦——请求方法不匹配导致了405错误!咱们来一步步理顺解决方案:

问题根源定位

从你补充的导航栏代码能明显看到问题:

<a class="dropdown-item" asp-area="" asp-controller="Home" asp-action="FreeCoffee">Coffee</a>

这个<a>标签被点击时,会默认发送GET请求到Home/FreeCoffee,但你的FreeCoffee Action明确标记了[HttpPost],只接受POST请求,服务器自然会返回"Method Not Allowed"的405错误。

而你写的表单提交逻辑本身是没问题的——JS代码会阻止表单默认的GET提交,转而发送POST请求,但问题出在用户可能是通过点击导航栏的链接触发请求,而非提交表单。

针对性解决方案

方案一:让导航栏指向表单页面(推荐)

这是最符合业务逻辑的方式:用户点击导航栏的"Coffee"链接,先进入包含手机号输入表单的页面,再提交表单发送POST请求。

  1. 先修改导航栏的链接,指向一个新的GET Action(用来返回表单视图):
<li>
    <a class="dropdown-item" asp-area="" asp-controller="Home" asp-action="FreeCoffeeForm">Coffee</a>
</li>
  1. 在HomeController中添加对应的GET Action,返回包含表单的视图:
[HttpGet]
public IActionResult FreeCoffeeForm()
{
    return View(); // 这里返回你包含那套手机号输入表单的视图
}

这样用户点击导航栏链接后,会进入表单页面,填写手机号后点击提交,JS就会发送正确的POST请求到Home/FreeCoffee,不会再触发405错误。

方案二:调整Action支持GET(不推荐,仅作补充)

如果特殊场景下你需要让FreeCoffee同时支持GET和POST,可以给Action添加[HttpGet]注解,但这种方式不符合你需要用户输入手机号的业务逻辑(GET请求无法方便地传递JSON格式的手机号参数),所以不建议这么做。

额外检查点

  • 确认你的PhoneNumberRequest类属性和前端参数匹配:前端发送的是小驼峰的phoneNumber,可以给类属性加上注解确保序列化正确:
public class PhoneNumberRequest
{
    [JsonPropertyName("phoneNumber")]
    public string PhoneNumber { get; set; }
}

(.NET Core默认的JSON序列化会自动处理大小写映射,但加注解能避免潜在的匹配问题)

  • 测试时确保AWS SNS的配置(如权限、区域、访问密钥)在localhost环境下正确,不过这是解决405之后需要关注的问题啦。

备注:内容来源于stack exchange,提问作者Veritas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 19:24:38