gpt4 book ai didi

javascript - 在添加 ApiController 属性之前,ASP.NET Core 3.1 无法处理 Axios 请求

转载 作者:行者123 更新时间:2023-12-02 22:02:44 25 4
gpt4 key购买 nike

我有以下问题。每当我向 Api 端点发送内容时,ASP.NET Core 3.1 就无法处理该请求。但是,当我添加 ApiController 属性时,它工作得很好。

我的代码是正确的,但只有当我添加此属性时才有效。怎么会这样?

作为引用,这是我的代码

API

[ApiController] //Remove this and the code breaks
[Route("api/SomeApi")]
public class ApiController : Controller {

private readonly IService service;

public ApiController(IService service)
{
this.service = service;
}

[HttpPost]
[Route("Add")]
public SomeClass Add(SomeClass foo)
{
var userId = service.GetCurrentUserId(User);
foo.Id = Guid.NewGuid();
foo.UserId = userId;
service.Add(foo);
return foo;
}
}

JS

axios.post('/api/SomeApi/Add', {
foo: this.foo,

}).then(function (response: any) {
this.Id = response.Id;
});

仅供引用,我的 ApiController 上还有其他使用 GET/POST 的方法。 GET 方法工作得很好,但 POST 方法仅在我使用查询参数时才有效。在本例中,我没有使用查询参数,因为要发送到 Api 的数据比示例中实际给出的数据多。

我已尝试使用 [FromBody] 获取回复。它不起作用。相反,我得到了 null。 foo 甚至没有实例化。

最佳答案

将请求体绑定(bind)到模型有两种类型,一种是从表单数据绑定(bind),另一种是application/json

对于Controller,默认获取表单数据。对于ApiController,默认获取json数据。

如果您想在不使用[ApiController]的情况下绑定(bind)请求正文,您可以添加[FromBody]:

//[ApiController] 
[Route("api/SomeApi")]
public class ApiController : Controller
{
private readonly IService service;
public ApiController(IService service)
{
this.service = service;
}

[HttpPost]
[Route("Add")]
public SomeClass Add([FromBody]SomeClass foo)
{
//do your stuff...
}
}

型号:

public class SomeClass 
{
public int Id { get; set; }
public string Name { get; set; }
}

查看:

@section Scripts{
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
axios.post('/api/SomeApi/Add', {
id: 1,
name: 'sdfsdf'
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
</script>
}

结果: enter image description here

关于javascript - 在添加 ApiController 属性之前,ASP.NET Core 3.1 无法处理 Axios 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59824953/

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