2012-02-08 2 views
3

Привет, у меня есть простой сервис WCF REST, мне нужно получить некоторые параметры через querystring, который выглядит так.WCF REST и QueryString, неправильный UriTemplate?

страница = 1 & тр = 10 & sortname = идентификатор & SortOrder = Asc & запрос = & qtype = Применение

Мой UriTemplate не работает, то, что здесь не так? просто пытаюсь получить параметр страницы до сих пор. Любая идея, как должен выглядеть uri?

[OperationContract] 

    [WebInvoke(Method = "POST", 
    BodyStyle = WebMessageBodyStyle.WrappedRequest, 
    ResponseFormat = WebMessageFormat.Json,RequestFormat = WebMessageFormat.Json, 
    UriTemplate = "/?page={page}")] 

    [System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)] 
    JSONData GetLogList(string page); 

Вот мой код

public class LogService : ILog 
{ 
    [System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)] 

    public JSONData GetLogList(string page) 
    { 
     var logContext = new LogViewDataContext(); 
     var logsList = from logs in logContext.Logs select logs; 
     //return logsList.Cast<Log>().ToString(); 


     var baseData = new JSONData(); 
     baseData.page = Int32.Parse(page ?? "1"); 
     baseData.total = logsList.Count(); 

     var cells = new ArrayList(); 


     var tmplist = new List<JSONDataRow>(); 
     foreach(var log in logsList) 
     { 
      var row = new JSONDataRow(); 
      row.id = log.ID; 
      cells.Add(value: log.Date); 
      cells.Add(value: log.Application); 
      cells.Add(value: log.Server); 
      cells.Add(value: log.Message); 
      row.cell = cells; 

      tmplist.Add(row); 

     } 

     int x = Int32.Parse(page); 
     int pageSize = 10; 



     baseData.rows = tmplist.Skip((x - 1) * pageSize).Take(pageSize).ToList(); 
     return baseData; 
    } 

} 

обслуживание Вот Javascript, что вызов службы.

<script type="text/javascript"> 

$(document).ready(function() { 

    $("#logGrid").flexigrid({ 
     type: 'POST', 
     url: 'http://MyWeb/Services/LogService.svc/', 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 


     colModel: [ 
      { display: 'Date', name: 'Date', width: 40, sortable: true, align: 'left' }, 
      { display: 'Application', name: 'Application', width: 150, sortable: true, align: 'left' }, 
      { display: 'Server', name: 'Server', width: 150, sortable: true, align: 'left' }, 
      { display: 'Message', name: 'Message', width: 250, sortable: true, align: 'left' } 
     ], 


     searchitems: [ 
      { display: 'Date', name: 'Date' }, 
      { display: 'Application', name: 'Application', isdefault: true }, 
      { display: 'Server', name: 'Server' } 
     ], 
     sortname: "id", 
     sortorder: "asc", 
     usepager: true, 
     title: "test", 
     useRp: true, 
     rp: 10, 
     showTableToggleBtn: false, 
     resizable: false, 
     width: 700, 
     height: 370, 
     singleSelect: true 

    }); 

}); 

     </script> 
+0

Откуда вы знаете, что это не работает? Как выглядит URL-адрес, который вы используете? – suing

+0

параметр страницы всегда имеет нулевое значение, но параметры запроса всегда имеют значения. –

ответ

5

Вы можете настроить свой URITemplate следующим образом:

URITemplate="/GetLogList?page={page}" 

Тогда ваш URL из JQuery должен быть как:

http://MyWeb/Services/LogService.svc/GetLogList?page=1 

UPDATE:

Если вы хотите другие параметры так как в строке запроса просто добавьте их в URItemplate

Ex:

URITemplate="/GetLogList?page={page}&sortorder={sortorder}" 

А потом просто иметь свой метод, чтобы тот параметр

JSONData GetLogList(string page, string sortorder); 

Try инспектировать полный запрос с Fiddler при выполнении запроса.

+0

Спасибо за ответ, но я делаю i POST из javascript. Это правильный способ получить параметры? –

+0

Строки запроса используются, когда вы пытаетесь извлечь, то есть выполнить GET. Также его хорошая практика - убедиться, что операция связана с именем ресурса. Вы пытаетесь выполнить POST, но ваше имя ресурса указывает на GET. Если метод предназначен только для получения некоторых данных и показывает пользователю, что он как WebGet, а не WebInvoke – Rajesh

+0

Есть ли какая-либо конкретная причина для использования первой косой черты в сигнатуре шаблона URL? Я обычно иду * URITemplate = "Some/Thing" *, и он создает тот же шаблон URL-адреса запроса. –

Смежные вопросы