jQuery / Ajax - 如何使用单个参数将纯文本传递给C#(PUT方法)?

时间:2014-07-15 23:01:22

标签: jquery asp.net-web-api

我有一个应用程序,它使用$ .ajax调用C#中名为/ api / show的web api url。当我运行项目时,我无法在第二个代码体上获得字符串值,而不是null。我明确地将showsList传递给服务器控制器中的put方法(以showsList为例," show1,show2,show3")这是一个以逗号分隔的纯文本值。

如何将逗号分隔的文本放入第二个代码段中具有单个参数的PUT方法?

我是否需要完全避免为此目的使用$ .ajax?如果是这样,我需要确定我需要调用哪个其他jQuery方法。

客户代码:

function addShows() {
        var selectedShows = [];
        var showList = "";
        selectedShows = getSelectedShows();
        showList = selectedShows.join(", ");
        $.ajax({
            url: "/api/show",
            type: "PUT",
            dataType: "text",
            data: showList,
            beforeSend: function (req) {
                req.setRequestHeader('email', $("#email").val());
            },
            success: function (status) {
                window.location.reload(true);
            }
        });
    }

服务器控制器PUT方法代码:

// PUT api/show/5
public void Put([FromBody]string value)
{
      string email = Request.Headers.GetValues("email").FirstOrDefault().Replace('{', ' ').Replace('}', ' ').Trim();
      DAL.DAL.addShowsByUserEmail(email, value);
}

2 个答案:

答案 0 :(得分:1)

我不确定$.ajax在这里最有意义 - 考虑到你没有从服务器接收数据。 $.post可能会更有意义。但是,$.ajax应该有效。

关于您目前如何设置它的几个问题。首先,URL似乎错误地指向您的方法。它应该是url: "/api/show/Put",然后type:应该是type:POST - 这不是指向该方法,而是表示浏览器应该执行HTTP帖子。如果在方法中收到null,请尝试显式声明data:参数的对象:data: {value: showList} - 请注意,参数名value对应于方法的参数。

function addShows() {
        var selectedShows = [];
        var showList = "";
        selectedShows = getSelectedShows();
        showList = selectedShows.join(", ");
        $.ajax({
            url: "/api/show/Put",
            type: "POST",
            dataType: "text",
            data: {value:showList},
            beforeSend: function (req) {
                req.setRequestHeader('email', $("#email").val());
            },
            success: function (status) {
                window.location.reload(true);
            }
        });
    }

您的方法应该类似于:

[HTTPPost]
public void Put(string value)
{
      string email = Request.Headers.GetValues("email").FirstOrDefault().Replace('{', ' ').Replace('}', ' ').Trim();
      DAL.DAL.addShowsByUserEmail(email, value);
}

如果这可以解决您的问题,请告诉我。

答案 1 :(得分:1)

function addShows() {
        var selectedShows = [];
        var showList = "";
        selectedShows = getSelectedShows();
        showList = selectedShows.join(", ");
        $.ajax({
            url: "/api/show",
            type: "PUT",
            dataType: "json",
            data:JSON.stringify(showList),
            beforeSend: function (req) {
                req.setRequestHeader('email', $("#email").val());
            },
            success: function (status) {
                window.location.reload(true);
            }
        });
    }