WCF REST和QueryString,错误的UriTemplate?

时间:2012-02-08 09:56:04

标签: c# asp.net wcf web-services rest

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

页= 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>

1 个答案:

答案 0 :(得分:5)

您可以按如下方式设置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检查完整请求。

相关问题