让我们假设以下内容:
请考虑以下代码:
public class Fruit {
public int FruitID { get; set; }
public string FruitName { get; set; }
public Fruit(string json){
JObject o = JObject.Parse(json);
FruitID = Int32.Parse((string) o["id"]);
FruitName = (string) o["name");
}
}
public static Fruit getFruit(int id){
Task<Fruit> task = "http://fruit.com/get_fruit"
.SetQueryParams(new { fruit_id = id })
.GetStringAsync();
return new Fruit(task.Result);
}
(如果此时出现任何问题,请纠正我,我是C#Tasks的新手)
让我们说当该任务返回时,如果json收到有效的ID,json可能如下所示......
{
"status":1,
"id": 3,
"name": "apple"
}
如果收到无效ID,则为此。
{
"status":0
}
如果用户应该输入搜索到的ID,则他们有可能输入不存在的ID,因为只有5,(0到4)。根据我在上面输入的代码,如果返回"status":0
,我可以看到应用程序崩溃,因为它没有类构造函数正在查找的两个字段。
我的问题是:处理可能无效输入的最佳方法是什么(例如用户输入ID为20)?
答案 0 :(得分:2)
RESTful API的推荐方法是使用HTTP错误代码,在您的情况下,它将是404(未找到),因为请求的水果不存在。 在尝试创建对象之前,您应该处理错误代码。因此,检查请求是否已成功执行(200 OK),然后处理有效负载。
以下是状态代码的参考: http://www.restapitutorial.com/httpstatuscodes.html
答案 1 :(得分:0)
输入验证是Web服务开发中的重要任务之一。我个人有两个阶段。首先,我检查对象的空值。我写这个方法是为了做到这一点:
private bool HasNull(object webServiceInput, string[] optionalParameters = null)
{
if (ReferenceEquals(null, webServiceInput))
return false;
if (optionalParameters == null)
optionalParameters = new string[0];
var binding = BindingFlags.Instance | BindingFlags.Public;
var properties = webServiceInput.GetType().GetProperties(binding);
foreach (var property in properties)
{
if (!property.CanRead)
continue;
if (property.PropertyType.IsValueType)
continue;
if (optionalParameters.Contains(property.Name))
continue;
var value = property.GetValue(webServiceInput);
if (ReferenceEquals(null, value))
return false;
}
return true;
}
然后,如果某些输入应该具有指定的验证,我将单独检查它。例如,我检查ID在0到5之间; 我希望它可以帮助你。