【问题标题】:Only first POST method of controller is called仅调用控制器的第一个 POST 方法
【发布时间】:2014-03-25 18:19:37
【问题描述】:

我的控制器中有几个 post 方法。每当我向这个控制器发布数据时,只会调用第一个 POST 方法。我的要求是调用第二种方法,因为两种方法的参数都会不同。这是路由配置:

config.Routes.MapHttpRoute(
name: "AddUser",
routeTemplate: "api/users/adduser",
defaults: new { controller = "users" }
);
config.Routes.MapHttpRoute(
name: "ChangeUser",
routeTemplate: "api/users/changeuser",
defaults: new { controller = "users" }
);

这是我的控制器的代码:

[AllowAnonymous]
[ActionName("adduser")]
public string PostDetails(JObject userData)//Always this method is called.
{
//My code here
}

[AllowAnonymous]
[ActionName("changeuser")]
public string ChangeUser(int userId)
{
//My code here
}

这是从视图中调用的:

Ext.Ajax.request( { url: 'localhost/myapp/api/users/changeuser'
                  , mode: 'POST'
                  , params: { userID: 1 }
                  }
                );

【问题讨论】:

  • 你能显示调用代码(视图中的表单)吗?
  • 我在客户端使用 ExtJS。这就是我调用这些方法的方式: Ext.Ajax.request({ url: 'localhost/myapp/users/changeuser', mode: 'POST', params: { userID: 1 }});
  • 请将您的代码添加到问题中,而不是在 cmets 中。
  • 您的浏览器控制台有任何错误吗?
  • 没有。我可以调试代码。它从第一个 post 方法“添加用户”返回结果。

标签: c# asp.net-mvc asp.net-mvc-4


【解决方案1】:

在路由配置中添加约束将解决您的问题。试试下面的配置..

config.Routes.MapHttpRoute(
name: "AddUser",
routeTemplate: "api/{controller}/{action}",
defaults: new { },
constraints: new { controller = "users", action = "adduser" }
);

config.Routes.MapHttpRoute(
name: "ChangeUser",
routeTemplate: "api/{controller}/{action}",
defaults: new { },
constraints: new { controller = "users", action = "changeuser" }
);

C#部分:

[AllowAnonymous]
[ActionName("adduser")]
[AcceptVerbs("Post")]
public string PostDetails(JObject userData)//Always this method is called.
{
//My code here
}

[AllowAnonymous]
[ActionName("changeuser")]
[AcceptVerbs("Post")]
public string ChangeUser(int userId)
{
//My code here
}

【讨论】:

  • 没用。仍在调用“AddUser”方法。
  • 我也更新了 C# 代码部分。路由模板字符串必须完全是“api/{controller}/{action}”。不要在路由模板中使用控制器名称或操作名称。约束将检查给定 url 中的控制器和操作..
  • 我根据提供的代码对其进行了更改,但现在如果我将控制器称为“localhost/myapp/api/users”,它会采用相同的方法(第一个 post 方法)。如果我将控制器称为“localhost/myapp/api/users/changeuser”,则会出现 404 错误。
  • 我认为问题在于您的 changeuser 方法。它接受整数作为参数。您必须将其修改为值类型。创建一个包含一个整数属性的类,并将该类用作参数。推荐人:stackoverflow.com/questions/16374954/…
【解决方案2】:

试试:

[HttpPost, ActionName("Name")] 

代替:

[ActionName("Name")]

我不是专家,但它可能会这样工作。

【讨论】:

  • 你能发布.net部分吗?
  • 我已经在我的问题中发布了(控制器方法)。
猜你喜欢
  • 1970-01-01
  • 2013-01-29
  • 1970-01-01
  • 2011-09-23
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-30
相关资源
最近更新 更多