WCF REST and QueryString, wrong UriTemplate?

本文关键字:wrong UriTemplate QueryString REST and WCF | 更新日期: 2023-09-27 18:23:39

嗨,我有一个简单的WCF REST服务,我需要通过querystring获取一些参数,如下所示。

page=1&rp=10&sortname=id&排序顺序=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>

WCF REST and QueryString, wrong UriTemplate?

你能按如下方式设置你的URITemplate吗:

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

然后你从jquery的URL应该是这样的:

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

更新:

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

例如:

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

然后只需要你的方法就可以得到这个参数

JSONData GetLogList(string page, string sortorder);

在提出请求时,试着与Fiddler一起检查完整的请求。