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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:25:25