ASP.NET后端POST请求报错:找不到匹配的HTTP资源URI
问题排查与解决方案
1. 确认Web API路由配置位置是否正确
你的RegisterRoutes方法参数是RouteCollection routes,这是MVC路由的配置入口,而Web API的路由规则应该放在WebApiConfig.cs中,使用HttpConfiguration作为参数。如果把Web API路由写到MVC的RouteConfig里,会导致路由规则不生效。
正确的WebApiConfig配置示例:
public static class WebApiConfig { public static void Register(HttpConfiguration config) { // 启用属性路由 config.MapHttpAttributeRoutes(); // 配置常规路由模板 config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
同时在Global.asax的Application_Start中,确保先注册Web API路由:
protected void Application_Start() { // 优先注册Web API路由 GlobalConfiguration.Configure(WebApiConfig.Register); // 再注册MVC路由 RouteConfig.RegisterRoutes(RouteTable.Routes); }
2. 修正POST方法的参数绑定逻辑
你的Create方法直接使用零散参数,POST请求中这类参数默认不会自动从请求体绑定。建议封装参数为模型类,并明确指定参数来源:
步骤1:创建参数模型
public class MovieCreateRequest { public string MovieName { get; set; } public string Director { get; set; } public string Genre { get; set; } public string Description { get; set; } public decimal RentalCost { get; set; } public string Picture { get; set; } }
步骤2:修改Create方法
[AllowCrossSite] [HttpPost] public HttpResponseMessage Create([FromBody] MovieCreateRequest request) { if (request == null) { return Request.CreateResponse(HttpStatusCode.BadRequest, "Please provide the correct information."); } using (VidlyDBContext dbContext = new VidlyDBContext()) { Movie createMovie = new Movie { MovieName = request.MovieName, Director = request.Director, Genre = request.Genre, Description = request.Description, RentalCost = request.RentalCost, Picture = request.Picture }; dbContext.Movies.Add(createMovie); dbContext.SaveChanges(); return Request.CreateResponse(HttpStatusCode.Created, createMovie); } }
3. 验证属性路由的正确性(可选)
如果使用属性路由,确保方法上的Route标记准确,且Web API已启用属性路由:
[AllowCrossSite] [HttpPost] [Route("api/movie/Create")] public HttpResponseMessage Create([FromBody] MovieCreateRequest request) { // 方法逻辑不变 }
4. 排除跨域配置干扰
暂时移除[AllowCrossSite]自定义属性,测试Create接口是否能正常访问,确认跨域配置没有拦截或修改请求路由。
5. 检查前端请求格式
确保EXT JS发送的是POST请求,路径准确为api/movie/Create,且请求体为JSON格式(设置Content-Type: application/json)。如果发送的是FormData,需在Web API中添加表单编码支持:
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json")); config.Formatters.FormUrlEncodedFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));
内容的提问来源于stack exchange,提问作者Xirin
相关产品推荐
相关产品推荐

