我在客户端有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/action
和controller/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
我可能会猜到它为什么会出错,但更重要的问题是如何让它发挥作用?谢谢!
答案 0 :(得分:0)
只需将两者都发布到/ api / test / data:“save”将具有空id,“edit”将不会。