web api handle拼写错误的fromuri参数

时间:2016-10-14 11:19:33

标签: c# asp.net asp.net-web-api

我有一个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无效”。

1 个答案:

答案 0 :(得分:2)

这是使用LINQ的方法:

  1. 将查询参数作为NameValuePairs获取,只选择键并转换为List。

  2. 获取Parameter类的属性,只选择名称并转换为List。

  3. 找出两个列表的设置差异。

  4. 以下是一些代码:

    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属性。因此,如果这不是空的,你可以抛出一个错误,甚至告诉他们哪些参数没有预期/拼写错误。