【问题标题】:How to implement Web API controller (mvc 4) with multiple HttpPost actions?如何使用多个 HttpPost 操作实现 Web API 控制器(mvc 4)?
【发布时间】:2016-06-23 17:45:18
【问题描述】:

如何在 MVC 4 中使用多个 [HttpPost] 操作实现 Web API?

不知何故,它不允许这样做。

以下是我的代码:

public class DataOperationController : ApiController
{
    DataOperationManager dalManager = new DataOperationManager();

    [HttpPost]
    public User AddUser(User user)
    {
        User newUser = new NBFTestModels.Models.User();
        newUser = dalManager.AddUser(user);
        return newUser;
    }

    [HttpPost]
    public Device AddDevice(Device device)
    {
        Device newDevice = new NBFTestModels.Models.Device();
        newDevice = dalManager.AddDevice(device);
        return newDevice;
    }
}

WebAPI 配置:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

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

        config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize;
        config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
        config.EnableSystemDiagnosticsTracing();
    }
}

我在 Web API2 中检查了 Route 属性,它解决了这个问题。但根据客户端限制,我们必须使用 mvc4。 MVC 4 不支持路由属性。有什么建议吗?

【问题讨论】:

    标签: c# asp.net-mvc-4 asp.net-web-api routes


    【解决方案1】:

    在你的启动类中配置属性路由。

    //in your startup class
    public void Configuration(IAppBuilder app)
    {
        app.UseCors(CorsOptions.AllowAll);
    
        var configuration = new HttpConfiguration();
    
        //for route attributes on controllers
        configuration.MapHttpAttributeRoutes();
    }
    
    public class DataOperationController : ApiController
    {
            DataOperationManager dalManager = new DataOperationManager();
            [HttpPost, Route("api/users/add")]
            public User AddUser(User user)
            {
                User newUser = new NBFTestModels.Models.User();
                newUser = dalManager.AddUser(user);
                return newUser;
            }
    
            [HttpPost, Route("api/devices/add")]
            public Device AddDevice(Device device)
            {
                Device newDevice = new NBFTestModels.Models.Device();
                newDevice = dalManager.AddDevice(device);
                return newDevice;
            }
    }
    

    【讨论】:

    • 表示是否需要添加configuration.MapHttpAttributeRoutes(); WebApiConfig 文件中的代码?
    • 谢谢,但 MapHttpAttributeRoutes 不支持。我认为需要更新受限的 nuget 包
    猜你喜欢
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 2012-07-09
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多