我将在教程课程之后,以ASP.NET Core为后端构建一个React.js应用程序。我正在使用Axios来处理HTTP请求,我测试了get,post,put请求的运行情况,但是在del请求期间不断出错。这是产生相同错误的简化函数:
const handleDeleteActivityTest = () => {
Axios.delete('https://localhost:5001/api/activities/e2beb0eb-eaaa-49ee-92d8-daf472210456');
}
并且该请求在控制台中打印以下错误消息:
删除https:// localhost:5001 / api / activities / e2beb0eb-eaaa-49ee-92d8-daf472210456 415(不支持的媒体类型)
createError.js:16未捕获(承诺)错误:XMLHttpRequest.handleLoad(xhr.js:61)处定居点(settle.js:17)处createError(createError.js:16)处状态代码为415的请求失败
但是我在Postman中进行了测试,删除请求的效果很好,并返回200 OK响应,我可以在数据库中看到该条目已删除:
如果有人可以教育我这里发生的事情,我将不胜感激。谢谢您,保持安全快乐。
编辑----------------------------------
这是处理HTTP请求的后端代码。它分为两部分:1.)接收HTTP请求的控制器和2.)处理该请求的MediatR类:
1.)
namespace API.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ActivitiesController : ControllerBase
{
private readonly IMediator _mediator;
public ActivitiesController(IMediator mediator)
{
_mediator = mediator;
}
[HttpDelete("{id}")]
public async Task<ActionResult<Unit>> Delete(Guid id, Delete.Command command)
{
command.Id = id;
return await _mediator.Send(command);
}
}
}
2.)
namespace Application.Activities
{
public class Delete
{
public class Command : IRequest
{
public Guid Id { get; set; }
}
public class Handler : IRequestHandler<Command>
{
private readonly DataContext _context;
public Handler(DataContext context)
{
_context = context;
}
public async Task<Unit> Handle(Command request, CancellationToken cancellationToken)
{
var activity = await _context.Activities.FindAsync(request.Id);
if (activity == null)
throw new Exception("Could not find activity");
_context.Remove(activity);
var success = await _context.SaveChangesAsync() > 0;
if (success) return Unit.Value;
throw new Exception("Problem saving changes");
}
}
}
}
我发现控制器中的HttpDelete方法将id接收为Guid,但在React应用程序中id键入为字符串,因此我在控制器和MediatR类中将类型更改为字符串,但是出现了相同的http错误415。
Axios不会在删除呼叫中发送内容类型。看起来ASP.net核心想要一个content-type。
作为解决方法,您可以仅将主体添加到delete调用中,然后Axios将添加内容类型,这应该可以解决问题。
const handleDeleteActivityTest = () => {
Axios.delete('https://localhost:5001/api/activities/e2beb0eb-eaaa-49ee-92d8-daf472210456', {
data: {foo: 'bar'}
});
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句