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

jQuery/Ajax-如何使用单参数将纯文本传递到C#(PUT方法)?,jquery,asp.net-web-api,Jquery,Asp.net Web Api,我有一个应用程序,它使用$.ajax调用C#中名为/api/show的web api url。当我运行项目时,我无法将第二个代码体上的字符串值设置为null以外的任何值。我显式地将showsList传递给服务器控制器中的put方法(showsList是一个示例,“show1,show2,show3”),它是一个逗号分隔的纯文本值 如何将逗号分隔的文本放入第二个代码段上只有一个参数的PUT方法中 为此,我是否需要完全避免使用$.ajax?如果是这样,我需要确定需要调用哪个jQuery方法 客户端代

我有一个应用程序,它使用$.ajax调用C#中名为/api/show的web api url。当我运行项目时,我无法将第二个代码体上的字符串值设置为null以外的任何值。我显式地将showsList传递给服务器控制器中的put方法(showsList是一个示例,“show1,show2,show3”),它是一个逗号分隔的纯文本值

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

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

客户端代码:

服务器控制器放置方法代码:

//放置api/show/5
公共void Put([FromBody]字符串值)
{
字符串email=Request.Headers.GetValues(“email”).FirstOrDefault().Replace('{','').Replace('}','').Trim();
DAL.DAL.addshowsbyseremail(电子邮件,值);
}

我不确定
$.ajax
在这里是否最有意义-考虑到您没有从服务器接收回数据<代码>$。post可能更有意义。但是,
$.ajax
应该可以工作

您当前如何设置它有几个问题。首先,URL似乎不正确地指向您的方法。它应该是
url:“/api/show/Put”
,然后
类型:
应该是
类型:POST
——这并不指向方法,而是表示浏览器应该执行HTTP POST。如果在方法中接收到null,请尝试显式声明
数据:
参数:
数据:{value:showList}
-请注意,参数名
,对应于方法的参数

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

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

结果证明我必须以json格式发送showList。更具体地说是{“list”:showList}。我没有使用data:JSON.stringify(showList),但我添加了一个名为UserShows的模型,该模型的属性类型为string,名为list,以匹配JSON键。我确实使用了JSON而不是文本,但使用了$.ajax。关键的修改是在我的项目中添加一个具有属性公共字符串列表{get;set;}的模型,该列表与json键同名。
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);
            }
        });
    }
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);
            }
        });
    }