[英]POST Request with Jquery's $.post(), 405 Method Not Allowed
我在C#控制器中设置了一个异步任务,因此已在此处进行了简化:
命名空间MyApp.Api {
public class TimeAllocationController : BaseApiController
{
[Route("api/timeallocation")]
[HttpPost]
public async Task<ActivityValidationResult> Post(string id)
{
//logic here...
}
理想情况下,我想使用$ .post()方法在JQuery中传递整个有效负载,但是如果出现以下情况,我会不断获取405 method not allowed
我尝试在有效负载中传递C#的Post()
字符串ID。 我只能这样传递它:
$.post('/api/timeallocation/' + categoryId...
我不能像这样传递它:
$.post('/api/timeallocation?id=' + categoryId...
我不想执行以上任何一项操作,只需在JS文件中设置带有id和所有其他必需属性的payload
变量,然后在其上调用$.post()
。
至于405错误的其他可能原因,我已经证实这不是由于身份验证原因引起的。
我在这里有东西吗?
如果要使用来自jQuery的有效负载来调用它,则应该使用具有[FromBody]
属性的Post方法,如下所示:
public class TimeAllocationController : BaseApiController
{
[Route("api/timeallocation")]
[HttpPost]
public async Task<ActivityValidationResult> Post([FromBody] string id)
{
//logic here...
}
然后你可以用
$.ajax({
url: "/api/timeallocation/",
dataType: "json",
type: "POST",
data: {
id: categoryId
}
});
你应该打电话
$.post('/api/timeallocation/', categoryId)
或者您可以添加id参数的[FromUri]属性并调用
$.post('/api/timeallocation?id' + categoryId)
public class TimeAllocationController : BaseApiController
{
[Route("api/timeallocation")]
[HttpPost]
public async Task<ActivityValidationResult> Post(JObject json)
{
string id = json["id"];
//login here
}
}
or
public class TimeAllocationController : BaseApiController
{
[Route("api/timeallocation")]
[HttpPost]
public async Task<ActivityValidationResult> Post(dynamic json)
{
string id = json.id ?? "";
//login here
}
}
$.ajax({
url: "/api/timeallocation/",
dataType: "json",
type: "POST",
data: {
id: categoryId
}
});
我可以使用控制器中的以下命令解决此问题:
public async Task<ActivityValidationResult> Post(string id, [FromBody] TimeAllocationActivity payload)
payload
在其中处理TimeAllocationActivity
属性。 注意,我确实必须创建TimeAllocationActivity
模型,因为它以前不存在。
在JS端,我创建了有效负载变量,然后像这样设置请求:
processCheckAjax = $.ajax({
url: "/api/timeallocation/" + categoryId,
dataType: "json",
type: "POST",
data: JSON.stringify(payload)
我确实觉得很奇怪,我仍然必须将categoryId
附加到路由上,并且无法将其包含在有效负载中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.