我有一个使用$的应用程序。在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);
}
});
}