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;
}
“它爆炸了”并没有提供足够的细节来完全帮助你…它会在发现时爆炸吗?还是在名字上?