嗨,我有一个简单的WCF REST服务,我需要通过看起来像这样的querystring获取一些参数。

页面= 1&rp = 10&sortname = id&sortorder = asc&query =&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>

最佳答案

您可以按以下方式设置URITemplate:

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


然后,您来自jquery的网址应类似于:

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


更新:

如果您想要查询字符串中的其他参数,只需将它们附加到URItemplate

例如:

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


然后让您的方法拥有该参数

JSONData GetLogList(string page, string sortorder);


发出请求时,尝试使用Fiddler检查完整的请求。

08-26 19:58