ASP NET MVC HttpDelete和Angular JS $ http

时间:2014-12-28 19:00:20

标签: javascript asp.net asp.net-mvc angularjs

我这样想:

$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时,我尝试从Angular URL中删除删除操作。但这不起作用......我不知所措......

2 个答案:

答案 0 :(得分:0)

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

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

在动作控制器中使用[HttpDelete]

答案 1 :(得分:0)

有两种解决方案。

首先,保持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