我有一个应用程序,它使用$ .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);
}
答案 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);
}
});
}