我正在建立一个简单的MVC项目,因为我想扩展我在Umbraco范围之外的知识,我通常会做这类项目。
我熟悉WebApi但似乎无法在此实例中使用它。
我的视图中有一个使用以下Javascript初始化的日期选择器:
$('#id-tour_0').datepicker({
changeMonth: true,
changeYear: true,
showOn: "button",
buttonImage: "Content/themes/base/images/icon_calendar.gif",
buttonImageOnly: true,
onSelect: function (date) {
$.ajax({
url: '/api/tour/requesttours',
type: 'POST',
data: JSON.stringify(date),
dataType: 'json',
success: function (data){
console.log(data);
}
});
}
});
然后在datepicker中进行选择后发布到以下WebApi方法:
public class TourController : ApiController
{
[System.Web.Http.AcceptVerbs("GET", "POST")]
public string RequestTours([FromBody] String request)
{
return request;
}
}
我的WebApiConfig.cs设置如下:
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
然而,当我断开我的WebApi方法时,我可以看到请求即将出现为null。为什么会这样,如何让它接收我的Javascript发布的值?
N.B。我在Firebug中使用了格式,并且正确的日期正确地发布到方法
答案 0 :(得分:2)
Post参数名称应映射到类文件中函数参数的名称
所以创建一个像这样的对象
var dateX = new Object();
dateX.request = date.Date;
然后在你的ajax调用中发送这个对象
data: JSON.stringify(dateX),
或直接传递像这样的对象
data: '{request:"'+ date.Date +'"}'
答案 1 :(得分:0)
我最终做了以下事情:
$('#id-tour_0').datepicker({
changeMonth: true,
changeYear: true,
showOn: "button",
buttonImage: "Content/themes/base/images/icon_calendar.gif",
buttonImageOnly: true,
onSelect: function (date) {
$.ajax({
url: '/api/tour/requesttours',
type: 'POST',
data: {Date: date},
dataType: 'json',
success: function (data){
console.log(data);
}
});
}
});
然后我在C#代码中创建了一个新对象,我将请求参数映射到:
public class TourController : ApiController
{
public string RequestTours([FromBody] DateRequest request)
{
return request.Date;
}
}
public class DateRequest
{
public string Date { get; set; }
}