繁体   English   中英

带有Jquery的$ .post(),405方法的POST请求

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM