1.启用跨域提交
<system.webServer> <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="*" /> <add name="Access-Control-Allow-Methods" value="GET, POST" /> </customHeaders> </httpProtocol> </system.webServer>
(function () { var domain = ‘http://localhost:5000/‘; var apiUrl = { getPostOne: function (action) { return domain + ‘postone/‘ + action; }, getOne: function (action) { return domain + ‘getone/‘ + action; } } window.apiUrl = apiUrl; })();
2.Get方式和MVC相同
Get方式前台代码
/* * 跨域的get请求 * 1个参数 */ $.getJSON(apiUrl.getOne("testone"), { name: 234 }).done(function (data) { alert(data); }); /* * 跨域的get请求 * 2个参数 */ $.get(apiUrl.getOne("TestTwo"), { name: ‘abc‘, age:11 }, function (data) { alert(data); });
Get方式后台代码
/* * 1.WebApi 控制器方法 仅支持一种格式的请求,默认为Get请求,如果其中一个指定Post,其他请求也为Post * 2.WebApi 控制器方法 默认不支持Get请求, * 抛出异常:The requested resource does not support http method ‘GET‘. * 需要手动指定 * FromBody:指定参数来自外部请求 * FromUri:指定参数来自url */ //前台Get请求获取一个参数 [HttpGet] public string TestOne(string name) { return string.Format("姓名:{0}", name); } //前台Get请求获取2个参数 [HttpGet] public string TestTwo(string name, int age) { return string.Format("姓名:{0},年龄:{1}", name, age); }
3.POST方式和MVC中不相同,只获取第一个参数,需要制定 FromBody标志
前台代码
/* * 跨域的post请求 * 无参数,获取列表 */ $.post(apiUrl.getOne("PostNull"), { }, function (data) { console.info(data); alert(data[0].name); }); /* * 跨域请求Post * 一个参数,不能指定key的名称 * 注意参数指定 json 字符串 */ $.post(apiUrl.getOne("PostOne"), { ‘‘: ‘张三‘ }, function (data) { alert(data); }); /* * 跨域请求Post * 2个参数----失败 */ $.post(apiUrl.getOne("PostTwo"), { name: ‘张三‘ ,age:12}, function (data) { alert(data); }); /* * 跨域请求Post * 1个对象参数 */ $.post(apiUrl.getOne("PostThree"), { name: ‘张三‘, age: 12 }, function (data) { alert(data); }); $.ajax({ url: apiUrl.getOne("PostThree"), data: { name: ‘张三‘, age: 12 }, type: ‘post‘, success: function (data) { alert(data); } });
对应的后台代码
/* * 1.WebApi 控制器方法 默认支持Post请求 * 2.默认情况下,一个控制器只支持一个Post请求 * 指定Controller,不指定action时,当前controller中有多种请求方式, * 则:抛出异常,Multiple actions were found that match the request * 3.post方式只能接受一个参数而且必须放在FromBody 里用FromBody特性标识 */ //Post请求无参方法,返回结果json格式 [HttpGet] [HttpPost] public List<object> PostNull() { List<object> list = new List<object>() { new { name="张三"}, new { name="李四",age=11}, }; return list; } //Post请求一个参数 public string PostOne([FromBody] string name) { return string.Format("姓名:{0}", name); } /*Post请求2个参数, * 参与外部交互action中只接受一个参数 * 不支持多个FromBody * 抛出异常:"Can‘t bind multiple parameters (‘name‘ and ‘age‘) to the request‘s content." */ public string PostTwo([FromBody] string name, [FromBody] int age) { return string.Format("姓名:{0},年龄:", name, age); } //Post请求 1个 对象参数 public string PostThree([FromBody] Student stu) { return stu.ToString(); }
参考资料:
http://www.cnblogs.com/babycool/p/3922738.html
时间: 2024-12-26 20:31:04