为什么Ajax不发送数据?

如果输入变量(a)未设置为Null,则以下Ajax代码甚至不会触发我的操作。

Ajax代码:

var ab = "Chocolate Smoothies ya know?"; $("#customerSubmit").submit(function (e) { e.preventDefault(); $.ajax({ url: "/api/Booking/lander", method: "post", data: { a: ab } }) }); 

以下我的控制器代码:

 [HttpPost] public void lander(string a) { System.Diagnostics.Debug.WriteLine(a); } 

当我没有将它设置为null时,收到的输入为空。

触发断点时的屏幕截图:

在此处输入图像描述

我已经使用了类型/方法/等等。似乎没什么用

更新:

我甚至尝试了以下但没有用:

更新2:

即使以下不起作用,以下之一也给了我 – >“无法加载资源:服务器响应状态为405(方法不允许)”

 var ab = 'Chocolate Smoothies ya Know?'; $.ajax({ url:"/api/Booking/lander", data: {'': ab} }); 

 public string lander([FromUri]string asx) ////and asx = "" and /// asx = null 

在此处输入图像描述

在此处输入图像描述

更新3

发生了一些非常奇怪的事情,我使用了以下代码:

在此处输入图像描述 在此处输入图像描述

我收到以下错误:

在此处输入图像描述

当我用的时候

////(字符串a =“”)

它因某种未知原因触发了我的行动,发生了以下情况。

在此处输入图像描述

以下是我的WebApiConfig代码:

 using System; using System.Collections.Generic; using System.Linq; using System.Web.Http; namespace HotelManagementSystem { public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.MapHttpAttributeRoutes(); //routes.MapHttpRoute("RestApiRoute", "Api/{controller}/{id}", new { id = RouteParameter.Optional }, new { id = @"\d+" }); //this replaces your current api route config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } ); } } } 

更新4:

即使以下设置也不起作用:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

您需要设置contentType并将要发送到控制器的数据stringify 。 所以您要发送的数据将是:

 var postData = JSON.stringify({'a':ab}); 

因此,生成的代码应如下所示:

 var ab = 'Chocolate Smoothies ya Know?'; var postData = JSON.stringify({'a':ab}); $.ajax({ url: "/api/Booking/lander", method: "POST", contentType: "application/json", data: postData }); 

您也可以选择设置dataType: "json" 。 您不需要为lander方法中a参数指定任何查找位置(uri,body)。

您有RouteConfig.cs文件中定义的默认路由

 routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, namespaces: new [] { "YourNameSpace.Controllers" } ); 

如果您将签名中的“a”更改为“id”并通过ajax发送“id”,您将成功,但如果您希望在post方法中使用多个参数或不同的命名,请尝试定义新路由。