【发布时间】:2015-09-04 21:41:01
【问题描述】:
我的 API 有以下路由
GET:api/部门
GET:api/departments/{departmentID}/employees
第二条路由映射到下面的控制器动作
public IEnumerable<Employee> Get(int departmentID)
{
return GetEmployees(departmentID);
}
可能会使用不存在或用户无权访问的部门ID 调用此路由。发生这种情况时,正确的处理方法是什么?目前,我已修改控制器操作以返回 403,如下所示
public HttpResponseMessage Get(int departmentID)
{
var isDepartmentValid = CheckIfDepartmentIsAccessible(username, departmentID);
if(!isDepartmentValid)
{
return Request.CreateResponse(HttpStatusCode.Forbidden);
}
Request.CreateResponse(HttpStatusCode.OK, GetEmployees(departmentID));
}
这是正确的做法吗?似乎方法签名的更改使得更难理解从控制器操作返回的内容类型。有没有办法让方法签名保持不变但如果需要仍然返回 403?
【问题讨论】:
-
如果部门不存在,我实际上建议抛出 404 而不是 403,如果是权限问题,则抛出 403。
标签: c# asp.net-web-api2