jQuery/Ajax -如何通过单个参数将纯文本传递到c# (PUT方法)



我有一个使用$的应用程序。在c#中调用web api url/api/show。当我运行项目时,我无法在代码的第二体上获得字符串值,而不是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);
}

我不确定$.ajax在这里最有意义-考虑到您没有从服务器接收数据。$.post可能更有意义。然而,$.ajax应该工作。

关于当前如何设置它的几个问题。首先,URL似乎不正确地指向您的方法。它应该是url: "/api/show/Put",然后type:应该是type:POST—这并不指向该方法,而是表示浏览器应该执行HTTP post。如果你在你的方法中接收到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);
}

让我知道这是否解决了你的问题。

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);
            }
        });
    }

最新更新