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
相关产品推荐
相关产品推荐

