我有一个get方法,它接受一组可选参数。
public HttpResponseMessage Get([FromUri] Parameter parameter)
---------------------------
public class Parameter
{
public string TransactionStatus { get; set; }
public string AllVersions { get; set; }
public string RunNumber { get; set; }
}
我使用 api / item?transactionStatus = 1 或 api / item?transactionStatus = 1& allVersions = true 来调用api。我的问题是如何在请求中捕获/防止拼写错误的参数?假设如果 api / item?transactionStatus = 1& MISSPELLED = true 被调用,我想抛出错误“url无效”。
答案 0 :(得分:2)
这是使用LINQ的方法:
将查询参数作为NameValuePairs获取,只选择键并转换为List。
获取Parameter类的属性,只选择名称并转换为List。
找出两个列表的设置差异。
以下是一些代码:
var queryParameters = Request.GetQueryNameValuePairs().Select(q => q.Key).ToList();
var parameterProperties = typeof(Parameter).GetProperties().Select(p => p.Name).ToList();
var difference = queryParameters.Except(parameterProperties);
不同之处在于IEnumerable包含在URL中传递的参数,这些参数是Parameter类中的NOT属性。因此,如果这不是空的,你可以抛出一个错误,甚至告诉他们哪些参数没有预期/拼写错误。