如果输入变量(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:
即使以下设置也不起作用:
答案 0 :(得分:0)
您需要将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"
。您无需在a
方法中为lander
参数指定任何查找位置(uri,body)。
答案 1 :(得分:0)
您在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"并发送" id"通过你的ajax你会成功,但如果你想在post方法中有多个参数或不同的命名尝试定义新的路由。