我有一个ASP.NET WebAPI项目。在某个控制器中有一个后置动作,它接受一个参数[FromBody]。我在本地调试项目时收到的参数很好,但是当我发布同一个项目时,收到的参数为null。相同的WebAPI项目,同样的javascript客户端调用该操作。
Javascript(jQuery)请求:
var myRequest = $.ajax({
type: 'POST',
url: globalRoot + '/api/afternoonvisitcall',
data: AfternoonVisitCalls,
dataType: "text",
success: function (resultData) {
// resultData is false (for Published application)
},
error: function (error) {
}
});
CS控制器:
public class AfternoonVisitCallController : ApiController
{
public IEnumerable<string> Get(){...}
public object Get(string id){...}
public bool Post([FromBody]VisitList AfternoonVisitCalls)
{
if (AfternoonVisitCalls != null)
{
Logger.Log("In POST api/afternoonvisitcall",
Logger.files.WebAPI_log,
" input arg AfternoonVisitCalls is NOT null");
return AfternoonVisitCalls.SaveAfternoonListWithSamples();
}
else
{
Logger.Log("In POST api/afternoonvisitcall",
Logger.files.WebAPI_log,
" input arg AfternoonVisitCalls is NULL");
}
return false;
}
}
CS RouteConfig.cs文件:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
CS WebApiConfig.cs文件:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "myRoute",
routeTemplate: "api/{controller}/{action}/{id}/{date}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
在其他控制器中甚至还有其他后期操作,它运行正常。我不知道为什么会这样,我的想法已经不多了。任何帮助表示赞赏。感谢。
答案 0 :(得分:0)
有效!我不知道怎么做,但是我确定了 contentType:“application / json; charset = utf-8”和数据作为数据:JSON.stringify(avc_obj),而不是对象本身,在AJAX请求中。