gpt4 book ai didi

javascript - 带有单个字符串参数的 WebApi 2 POST 不起作用

转载 作者:IT王子 更新时间:2023-10-29 04:18:54 25 4
gpt4 key购买 nike

我有以下 Controller :

public class ValuesController : ApiController
{
// POST api/values
public IHttpActionResult Post(string filterName)
{
return new JsonResult<string>(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<string>(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<string>(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);
}
});

关于javascript - 带有单个字符串参数的 WebApi 2 POST 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37842231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com