MVC路由 - 对同一个动作的不同URL

时间:2014-02-25 22:54:51

标签: .net asp.net-mvc asp.net-mvc-4 backbone.js

我在客户端有backbone.js框架,对以下网址执行POST以创建/更新某个实体:
controller/action - 用于创建新的 controller/action/{id} - 用于更新现有的

我想要一个动作Save来处理这两个操作并执行实体创建/更新,具体取决于下面列出的传入模型的Id值:

public class TestModel
{
    public int? Id { get; set; }
    public string Name { get; set; }
}

发布的JSON模型如下:{ id: 123, name: "some name" }
因此,我希望有一个控制器操作Save并调整路由表,以便它接受controller/actioncontroller/action/{id}请求操作Save。 为了实现它,我绞尽脑汁 我的行动如下:

[HttpPost]
public ActionResult Save(TestModel model)
{
    // do something
}

以下路线配置无法正常工作:
1。

    routes.MapRoute(
        name: "Test.Save1",
        url: "api/test/data",
        defaults: new { controller = "Test", action = "Save" }
    );

    routes.MapRoute(
        name: "Test.Save2",
        url: "api/test/data/{id}",
        defaults: new { controller = "Test", action = "Save", id = UrlParameter.Optional }
    );

适用于/ api / test / data,在发布到/ api / test / data / 123时返回404

2

    routes.MapRoute(
        name: "Test.Save",
        url: "api/test/data/{id}",
        defaults: new { controller = "Test", action = "Save", id = UrlParameter.Optional }
    );

适用于/ api / test / data,在发布到/ api / test / data / 123时返回404

3

    routes.MapRoute(
        name: "Test.Save",
        url: "api/test/data/{*pathInfo}",
        defaults: new { controller = "Test", action = "Save" }
    );

适用于/ api / test / data,在发布到/ api / test / data / 123时返回404

我可能会猜到它为什么会出错,但更重要的问题是如何让它发挥作用?谢谢!

1 个答案:

答案 0 :(得分:0)

只需将两者都发布到/ api / test / data:“save”将具有空id,“edit”将不会。