Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery Asp.NETWebAPI可用于GET,但不能用于POST_Jquery_Asp.net_Http Post_Asp.net Web Api2_Http Get - Fatal编程技术网

Jquery Asp.NETWebAPI可用于GET,但不能用于POST

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:

我正在使用Asp.NETWebForms和WebAPI 2。我有一个使用GET的方法,但是当我使用POST时,它就不起作用了。如果您在下面看到,在该方法中有一个断点,并且在调用POST时它甚至没有到达该断点。奇怪的是,当我使用Postman来测试这个方法时,它与POST一起工作。我做错了什么

我的jquery代码

$.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,