ASP NET MVC HttpDelete and Angular JS $http

ASP NET MVC HttpDelete and Angular JS $http

本文关键字:JS http Angular and NET MVC HttpDelete ASP      更新时间:2023-09-26

我想这样做:

$http.delete('/Category/Delete', { params: { categoryId: 30 } })

并在一个名为 Category 的控制器中执行操作:

[HttpDelete]
public async Task<CustomResult> Delete(int categoryId)
{
    await this.categoryService.DeleteCategoryAsync(categoryId);
    return this.Json(true);
}

我假设它会被调用,但我得到404响应。

然后,我将操作结果转换为[HttpPost]并执行以下操作:

$http.delete('/Category/Delete', { categoryId: 30 })

但我得到了500回应。我不完全确定我应该在这里做什么。使用HttpDelete时,我尝试从角度URL中删除删除操作。但这行不通。我不知所措...

我认为将参数作为查询字符串发送将起作用。尝试以下代码

$http.delete('../Category/Delete?categoryId='+30)

并在操作控制器中使用 [HttpDelete]

对此有两种解决方案。

首先,保持 Web API 原样并更改角度:

$http.delete('/Category/Delete/' + categoryId)

原因:WebApi 在路由表中有一个用于/Category/Delete/{categoryId:int}的条目,这将使我们的路由需要具有/和参数值。

其次,保持角度不变并更改 Web API:

[HttpDelete]
public async Task<CustomResult> Delete([FromUri] int categoryId)
{
    await this.categoryService.DeleteCategoryAsync(categoryId);
    return this.Json(true);
}

我在参数中添加了 [FromUri] 属性,这意味着 Web API 将尝试从 URI 中提取此参数,如下所示/Category/Delete?categoryId=30