首页 > 解决方案 > 具有多个 HttpPosts 方法的 ASP.NET MVC Web api 不起作用

问题描述

我的 ASP.NET API 控制器中有这两个 post 方法:

    [HttpPost]
    [ActionName("post1")]
    public bool PostGradingTasks(List<Reports> landingCells)
    {
    }

    [HttpPost]
    [ActionName("post2")]
    public String UploadImages(HttpPostedFileBase file)
    {
    }

但是当我从我正在构建的这个应用程序中调用 PostGradingTasks 时,它不会被调用,只有当我完全删除 UploadImages 它才有效:这是我的路线

public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services
            // Configure Web API to use only bearer token authentication.
            config.SuppressDefaultHostAuthentication();
            config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            config.Routes.MapHttpRoute(
                name: "DefaultApiWithAction",
                routeTemplate: "api/{controller}/{id}/{bool}",
                defaults: new { communityRedBlue = RouteParameter.Optional, isAlphabeticalSort = RouteParameter.Optional }
            );

            config.Routes.MapHttpRoute(
                name: "ControllerAndAction",
                routeTemplate: "api/{controller}/{action}"
            );
        }
    }

我刚刚添加了这条路线:

config.Routes.MapHttpRoute(
                    name: "ControllerAndAction",
                    routeTemplate: "api/{controller}/{action}"
                );

但它仍然无法正常工作,我做错了什么?

标签: asp.netasp.net-mvcasp.net-web-api

解决方案


您应该使用 IMO 比约定路由更好的设计的属性路由。使用控制器和方法上的 Route/RoutePrefix 属性进行设置。

这是您的发布方法的示例

[RoutePrefix("api/test")]
public class TestController: ApiController
{
    [HttpPost]
    [Route("post1")] //api/test/post1
    public bool PostGradingTasks(List<Reports> landingCells)
    {
    }

    [HttpPost]
    [Route("post2")] //api/test/post2
    public String UploadImages(HttpPostedFileBase file)
    {
    }
}

推荐阅读