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

ASP.NET Core接口POST请求报405错误及路由歧义问题处理

ASP.NET Core接口POST请求405与路由歧义问题解决记录

问题现象

  • 向/AllVgnItmEsts/发送POST请求时,返回405错误,响应头显示仅允许GET方法,即便已将接口的[HttpGet]特性修改为[HttpPost],问题仍未解决
  • 调用原本正常的POST接口/restaurantItmEsts/时,触发AmbiguousMatchException异常,提示请求匹配多个端点;尝试请求/restaurantItmEsts/postvgnitmest仍返回405错误

解决方法

为接口的[HttpPost]特性添加具体路径参数,明确路由唯一性:

  • 对AllVgnItmEstsController中的接口,将[HttpPost]修改为[HttpPost("PostSearchAll")]
  • 对restaurantItmEsts相关接口,将[HttpPost]修改为[HttpPost("PostVgnItmEst")]
    此修改同时解决了路由歧义与405错误问题

相关代码示例

接口控制器代码(修改前)

[Route("[controller]")]
[ApiController]
public class AllVgnItmEstsController
{
    [HttpPost]
    [EnableCors("MyPolicy")]
    public async Task<ServiceResponse<IEnumerable<VgnItmEstSearchDto>>> PostSearchAll(
        VgnItmSearchParams searchParams
    )
    {
        var results = service.SearchAll(
            searchParams.SearchTerm, 
            searchParams.Page, 
            searchParams.PageSize, 
            searchParams.HasEst, 
            searchParams.DiscriminatorTags
        );
        return await Task.FromResult(results);
    }
}

请求体类型定义代码

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace Vepo.Application
{
    public interface IVgnItmSearchParams : ISearchParamsEntity
    {
        bool HasEst { get; set; }
        List<DiscriminatorTags> DiscriminatorTags { get; set; }
    }

    [Serializable]
    public struct VgnItmSearchParams : IVgnItmSearchParams {
        public VgnItmSearchParams(string searchTerm, int currentPage, int pageSize,  int page, bool hasEst, List<DiscriminatorTags> discriminatorTags)
        {
            this.SearchTerm = searchTerm;
            this.PageSize = pageSize;
            this.Page = page;
            this.HasEst = hasEst;
            this.DiscriminatorTags = discriminatorTags;
        }
        [Required]
        public int PageSize { get; set; }
        [Required]
        public int Page { get; set; }
        [Required]
        public bool HasEst { get; set; }
        [Required]
        public List<DiscriminatorTags> DiscriminatorTags { get; set; }
        [Required]
        public string SearchTerm { get; set; }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:53:26