如何安全地处理存储库数据的无效请求?

时间:2014-01-14 22:51:14

标签: c# asp.net-web-api controller repository asp.net-web-api-routing

使用此代码:

public String Get(int id)
{
        return platypi.Find(p => p.Id == id).Name;
}

...我可以通过以下方式获取现有数据:

http://localhost:33181/api/DPlatypus/N

(其中N对应于现有ID)。但是,如果我使用不存在的值,它就会爆炸。

所以,我试过这个:

public String Get(int id)
{
    if (!string.IsNullOrEmpty(platypi.Find(p => p.Id == id).Name))
    {
        return platypi.Find(p => p.Id == id).Name;
    }
    return string.Empty;
}

......但它没有任何有益效果。有没有办法安全地忽略无效请求?

2 个答案:

答案 0 :(得分:3)

你应该比那更具防御性。首先检查null ..否则你要求它爆炸:

var entity = platypi.Find(p => p.Id == id);

return entity == null ? string.Empty : entity.Name;

您目前还在进行多次查找..您不需要(Find检查名称..然后Find返回名称..)。

答案 1 :(得分:3)

如果Find方法引发异常,您可以将其包装在异常处理程序中。这将允许您“安全地”在无效输入上返回空字符串。

如果Find返回null,您可以执行以下操作:

public String Get(int id)
{
    var item = platypi.Find(p => p.Id == id);

    return item == null ? string.Empty : item.Name;
}