Jquery Asp.NETWebAPI可用于GET,但不能用于POST
我正在使用Asp.NETWebForms和WebAPI 2。我有一个使用GET的方法,但是当我使用POST时,它就不起作用了。如果您在下面看到,在该方法中有一个断点,并且在调用POST时它甚至没有到达该断点。奇怪的是,当我使用Postman来测试这个方法时,它与POST一起工作。我做错了什么 我的jquery代码Jquery Asp.NETWebAPI可用于GET,但不能用于POST,jquery,asp.net,http-post,asp.net-web-api2,http-get,Jquery,Asp.net,Http Post,Asp.net Web Api2,Http Get,我正在使用Asp.NETWebForms和WebAPI 2。我有一个使用GET的方法,但是当我使用POST时,它就不起作用了。如果您在下面看到,在该方法中有一个断点,并且在调用POST时它甚至没有到达该断点。奇怪的是,当我使用Postman来测试这个方法时,它与POST一起工作。我做错了什么 我的jquery代码 $.ajax({ url: 'MyController/GetUserDetail', type: 'POST', async: true, dataType:
$.ajax({
url: 'MyController/GetUserDetail',
type: 'POST',
async: true,
dataType: 'json',
data:
{
"search": myvariable
},
success: function (response) {
}
});
我的Web API方法。当使用[HttpGet]并将jquery从POST更改为GET时,它就可以工作了。但对于POST,这个方法从未被调用,因为断点从未命中,我也没有收到任何错误
[HttpPost]
public User GetUserDetail(string search)
{ //breakpoint here
}
我的路线配置
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
看起来像是CORS的问题。要处理Web API的CORS,请在Web API的Web.config文件的第节中添加以下设置:
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
使用字符串搜索参数时,您没有指定[FromBody]或[FromUri],因此字符串类型参数的默认值为FromUri。您正在体内传递参数。
因此,尝试将参数作为查询字符串发送…
我也没有收到任何错误
响应中将出现错误。在JS代码中发出请求后,您可以使用控制台的“网络”选项卡来查找它?是否可能它正在“吞咽”您的请求(可能它没有[HttpGet]属性)?1)检查url是否正确(浏览器网络选项卡)-如果您已部署它,可能需要MyApp/MyController/MyAction
使用@url.Action(“GetUserDetail”,“MyController”)
(但如果它位于.js文件中,则不需要)。2) 删除[HttpPost]
属性(至少现在,要排除它),除非您有其他重载-它无论如何都不应该是一个POST,因为它显然是一个GET“GetUserDetail”。@longcalk添加[HttpGet]
将限制为GET,而不是表示它是一个GET方法。如果只有一个方法(如暗示的,但未在OP中指定),那么它就不需要[HttpGet]
@freedomn-m,也许它根本不是GET/POST问题?也许您是从邮递员和客户端的另一个区域/控制器调用它?您是否考虑过通过查看F12/网络来调试它?或者请求“MyController/GetUserDetail/”?我正在使用.Net 4.6.2,似乎这是一个已知的问题(因为我看到一些关于它的帖子没有解决方案),或者它与您在上面发布的有关CORS的设置有关。我正在使用Windows身份验证。同样的代码在早期的.Net版本中也可以正常工作。明天将检查此CORS设置。
url: 'MyController/GetUserDetail?search=' + myvariable,