2015-07-10 2 views
0

Я проверял следующий учебник: http://blogs.msdn.com/b/martinkearn/archive/2015/03/10/using-odata-query-syntax-with-web-api.aspxOData запрос в чванства Ui

И мне было интересно, если есть поддержка в развязность щ каким-то образом показать параметры запроса.

По сути, я хотел, чтобы все вызовы, отмеченные атрибутом [EnableQueryAttribute], имели swagger ui для ввода параметров запроса, и я не хочу добавлять эти параметры в вызов метода. Я все еще хочу, чтобы они были в URL-адресе и вытащили контекст Owin.

Любые предложения?

ответ

1

Ответ был намного проще, чем я думал. То, что я закончил, это создание IOperationFilter и поиск всех операций с определенным типом возврата и добавление параметров к нему.

class QueryParameterFilter : IOperationFilter 
    { 
     void IOperationFilter.Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription) 
     { 
      if (apiDescription.ResponseDescription.ResponseType != null && apiDescription.ResponseDescription.ResponseType.Name.Contains("PagedResult")) 
      { 
       Dictionary<string, string> parameters = new Dictionary<string, string>() 
       { 
        { "$top", "The max number of records"}, 
        { "$skip", "The number of records to skip"}, 
        { "$filter", "A function that must evaluate to true for a record to be returned"}, 
        { "$select", "Specifies a subset of properties to return"}, 
        { "$orderby", "Determines what values are used to order a collection of records"} 
       }; 
       operation.parameters = new List<Parameter>(); 
       foreach (var pair in parameters) 
       { 
        operation.parameters.Add(new Parameter 
        { 
         name = pair.Key, 
         required = false, 
         type = "string", 
         @in = "query", 
         description = pair.Value 
        }); 
       } 
      } 
     } 

И затем они могут быть получены через контекст owin.

var params = owinContext.Request.Query.ToDictionary(p => p.Key, p => p.Value.FirstOrDefault()); 
Смежные вопросы