Csharp/C#教程:WebApi 2 POST使用单个字符串参数而不是wokring分享


WebApi 2 POST使用单个字符串参数而不是wokring

我有以下控制器:

public class ValuesController : ApiController { // POST api/values public IHttpActionResult Post(string filterName) { return new JsonResult(filterName, new JsonSerializerSettings(), Encoding.UTF8, this); } } 

WebApi配置

 config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional }); 

我使用这个js代码来调用api

 $.ajax( { url: "/api/values/", type: "POST", dataType: 'json', data: { filterName: "Dirty Deeds" }, success: function (result) { console.log(result); }, error: function (xhr, status, p3, p4) { var err = "Error " + " " + status + " " + p3; if (xhr.responseText && xhr.responseText[0] == "{") err = JSON.parse(xhr.responseText).message; console.log(err); } }); 

我不允许405方法(post)

有任何想法吗?

C#

 public class ValuesController : ApiController { // POST api/values [HttpPost] // added attribute public IHttpActionResult Post([FromBody] string filterName) // added FromBody as this is how you are sending the data { return new JsonResult(filterName, new JsonSerializerSettings(), Encoding.UTF8, this); } 

JavaScript的

 $.ajax( { url: "/api/Values/", // be consistent and case the route the same as the ApiController type: "POST", dataType: 'json', data: "=Dirty Deeds", // add an = sign success: function (result) { console.log(result); }, error: function (xhr, status, p3, p4) { var err = "Error " + " " + status + " " + p3; if (xhr.responseText && xhr.responseText[0] == "{") err = JSON.parse(xhr.responseText).message; console.log(err); } }); 

说明

因为您只发送一个值,所以在它前面添加=符号,因此它将被视为表单编码。 如果要明确这是您正在对ajax调用执行的操作,还可以添加内容类型。

 contentType: 'application/x-www-form-urlencoded' 

或者,您也可以通过URL发送内容或将内容包装在服务器上的对象以及ajax调用中并对其进行字符串化。

 public class Filter { public string FilterName {get;set;} } public class ValuesController : ApiController { // POST api/values [HttpPost] // added attribute public IHttpActionResult Post([FromBody] Filter filter) // added FromBody as this is how you are sending the data { return new JsonResult(filter.FilterName, new JsonSerializerSettings(), Encoding.UTF8, this); } 

JavaScript的

 $.ajax( { url: "/api/Values/", // be consistent and case the route the same as the ApiController type: "POST", dataType: 'json', contentType: 'application/json', data: JSON.stringify({FilterName: "Dirty Deeds"}), // send as json success: function (result) { console.log(result); }, error: function (xhr, status, p3, p4) { var err = "Error " + " " + status + " " + p3; if (xhr.responseText && xhr.responseText[0] == "{") err = JSON.parse(xhr.responseText).message; console.log(err); } }); 

[FromBody]添加到API方法签名,如public IHttpActionResult Post([FromBody]string filterName)并用引号包装ajax数据参数: data: '"' + bodyContent + '"'

不是很直观,但它确实有效。

将[HttpPost]属性添加到控制器中的方法

上述就是C#学习教程:WebApi 2 POST使用单个字符串参数而不是wokring分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1009020.html

(0)
上一篇 2021年12月29日
下一篇 2021年12月29日

精彩推荐