我在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文件中设置一个payload
变量,其ID和所有其他必需的属性,然后在其上调用$.post()
。>
由于405错误的其他可能原因,我已经证实这不是由于身份验证原因引起的。
这里有什么我可以俯瞰的地方吗?
答案 0 :(得分:1)
如果要使用来自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
}
});
答案 1 :(得分:0)
您应该致电
$.post('/api/timeallocation/', categoryId)
或者您可以添加id参数的[FromUri]属性并调用
$.post('/api/timeallocation?id' + categoryId)
答案 2 :(得分:0)
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
}
});
答案 3 :(得分:0)
我可以使用控制器中的以下内容解决该问题:
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
附加到路由上,并且无法将其包含在有效负载中。