Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net MVC路由-同一操作的不同URL_.net_Asp.net Mvc_Asp.net Mvc 4_Backbone.js - Fatal编程技术网

.net MVC路由-同一操作的不同URL

.net MVC路由-同一操作的不同URL,.net,asp.net-mvc,asp.net-mvc-4,backbone.js,.net,Asp.net Mvc,Asp.net Mvc 4,Backbone.js,我在客户端有一个backbone.js框架,它可以向以下URL发送帖子,以创建/更新某些实体: 控制器/操作-用于创建新的 控制器/action/{id}-用于更新现有控制器 我希望使用单个操作保存来处理这两个操作,并根据下面列出的传入模型的Id值执行实体创建/更新: public class TestModel { public int? Id { get; set; } public string Name { get; set; } } 发布的JSON模型看起来像:{id

我在客户端有一个backbone.js框架,它可以向以下URL发送帖子,以创建/更新某些实体: 控制器/操作-用于创建新的 控制器/action/{id}-用于更新现有控制器

我希望使用单个操作保存来处理这两个操作,并根据下面列出的传入模型的Id值执行实体创建/更新:

public class TestModel
{
    public int? Id { get; set; }
    public string Name { get; set; }
}
发布的JSON模型看起来像:{id:123,name:some name} 因此,我希望有一个单一的控制器动作保存,并对路由表进行调优,使其同时接受控制器/动作和控制器/动作/{id}动作保存请求。 我绞尽脑汁想实现它。 我的行为看起来像:

[HttpPost]
public ActionResult Save(TestModel model)
{
    // do something
}
以下路由配置无法使其工作: 一,

为/api/test/data工作,在发布到/api/test/data/123时返回404

二,

为/api/test/data工作,在发布到/api/test/data/123时返回404

三,

为/api/test/data工作,在发布到/api/test/data/123时返回404


我大概能猜出它为什么会出错,但更重要的问题是如何让它工作?谢谢大家!

只需将两者都发布到/api/test/data:save的id为空,edit的id为空。

请详细说明您的答案。目前,很难看出这是否解决了问题。我有固定的标点符号。
    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 }
    );
    routes.MapRoute(
        name: "Test.Save",
        url: "api/test/data/{id}",
        defaults: new { controller = "Test", action = "Save", id = UrlParameter.Optional }
    );
    routes.MapRoute(
        name: "Test.Save",
        url: "api/test/data/{*pathInfo}",
        defaults: new { controller = "Test", action = "Save" }
    );