1

这是我的路线:

routes.MapHttpRoute(name: "InsertOrUpdateDirector", routeTemplate: "api/awards/directors", defaults: new
    {
       controller = "Awards", action = "InsertDirector"
    });

这是控制器方法:

[HttpPost]
public void InsertOrUpdateDirector(Director director, string operation)
{
   string query = null;

   myConnection.Open();
   if (operation == "I")
   {
     query = "INSERT INTO...";
   }
   else if (operation == "U")
   {
     query = "UPDATE...";
   }
   var cmd = new SqlCommand(query, myConnection);
   cmd.ExecuteNonQuery();
   myConnection.Close();
}

如果我向上面发送一个 JSON 对象,它就可以工作。

现在我需要能够传递 JSON 对象以及字符串参数。

这是仅传递 JSON 对象的 AJAX 调用:

$.ajax({
        url: "http://localhost/x/api/awards/directors",
        type: "POST",
        dataType: "json",
        data: directorData 
     }).done(function () {
         detailRow.find(".directorsOrRecipients").data("kendoGrid").refresh();
     });

我的问题是,在这种情况下,如何将 JSON 对象以及字符串“I”传递给控制器​​?

directorData顺便说一下,是一个 JSON 对象。

4

3 回答 3

1

一种快速的方法是将其作为查询字符串参数添加到 URL:

url: "http://localhost/x/api/awards/directors?operation=I"

或者,如果你有一个变量:

url: "http://localhost/x/api/awards/directors?operation=" + operationValue

另一种选择是将“操作”值添加到 JSON 对象本身。我不知道Director你的代码中的 a 是什么,但为了争论,我们假设它是这样的:

{
    "ID" : 1,
    "Name" : "John"
}

然后您可以向该 JSON 对象添加另一个值:

{
    "ID" : 1,
    "Name" : "John",
    "operation" : "I"
}

这不会混淆服务器端操作方法参数的模型绑定。JSON 对象不需要与模型之一完全对齐。模型绑定将尽最大努力根据发布到操作的所有值来确定操作方法参数值。所以在上面的 JSON 对象中,它会知道“ID”和“Name”组成了一个Director对象,而“操作”就是这个string对象。

于 2013-09-11T18:43:11.830 回答
1

您需要创建一个带有 director 属性和 operation 属性的 JSON 对象。前者将包含您的directorData,而后者将包含您希望传递的字符串。

于 2013-09-13T14:08:03.883 回答
0

您可以调整路线,以便它可以处理操作:

routes.MapHttpRoute(name: "InsertOrUpdateDirector",
    routeTemplate: "api/awards/directors/{operation}",
    defaults: new
       {
           controller = "Awards",
           action = "InsertDirector",
           operation = UrlParameter.Optional
       });

然后当你调用它时,适当地格式化 URL:

url: "/Awards/directors/someoper",

这适用于常规 MVC(我在这台机器上没有 WebAPI,但我希望它也能在那里工作)。

就个人而言,我会避免将其operation与常规模型混合。它可能会起作用,但以后可能会变得混乱。

于 2013-09-11T18:49:49.997 回答