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

C# 如何安全地处理存储库数据的无效请求?,c#,asp.net-web-api,controller,repository,asp.net-web-api-routing,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(

使用此代码:

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;
}

…但它没有任何有益的效果。有什么方法可以安全地忽略无效请求吗?

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

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

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

您目前正在进行的不仅仅是一次查找。。您不需要它(
Find
检查name..然后
Find
返回name..)。

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

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

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

    return item == null ? string.Empty : item.Name;
}
“它爆炸了”并没有提供足够的细节来完全帮助你…它会在发现时爆炸吗?还是在名字上?