移动JSONP WCF回调参数的位置

本文关键字:位置 参数 回调 JSONP WCF 移动 | 更新日期: 2023-09-27 18:05:07

我试图配置我的web服务,回调参数是一个前缀,而不是调用的后缀。我想改变这一点的原因是因为我正在使用的一些预构建的teleerik组件以回调作为前缀调用它。

[JavascriptCallbackBehavior(UrlParameterName = "callback")]
public class Service : IService { }

这是我的服务合同:

    [OperationContract]
    [WebInvoke(Method = "GET",
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Bare,
        UriTemplate = "updatedata/models={inRecords_}")]
    CurrentBatch[] UpdateData(string inRecords_);

现在当我调用它的时候,我把它命名为

http://localhost:8000/Service/console/json/currentbatch/updatedata/models=myModelsHere?callback=myCallBack

但是我真正想要调用它的方式是(但截至目前,我得到一个404说没有找到端点)

 http://localhost:8000/Service/console/json/currentbatch/updatedata/?callback=myCallBack&models=MyModelsHere

我甚至尝试将服务契约属性更改为

        UriTemplate = "updatedata/&models={inRecords_}")]

但是我仍然得到一个404,说没有找到端点。

我能做些什么来解决这个问题,这样我的回调参数得到前缀,我可以调用它。

http://localhost:8000/Service/console/json/currentbatch/updatedata/?callback=myCallBack&models=MyModelsHere

MSDN页面也没有给出关于更改顺序的信息。http://msdn.microsoft.com/en-us/library/system.servicemodel.web.javascriptcallbackbehaviorattribute.urlparametername (v = vs.110) . aspx

移动JSONP WCF回调参数的位置

最终删除

[JavascriptCallbackBehavior(UrlParameterName = "callback")]

将服务契约更改为

[WebInvoke(Method = "GET",
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Bare,
        UriTemplate = "/?callback={callback}&models={rec}")]
    Stream InsertData(string callback, string rec);

,然后输出像;

        WebOperationContext.Current.OutgoingResponse.ContentType = "application/javascript";
        string serialized = JSONSerializationHelper.Serialize<CurrentBatch[]>(new CurrentBatch[] { new CurrentBatch() { GroupName = "hello" } });
        return new MemoryStream(Encoding.UTF8.GetBytes(callback+ "(" + serialized + ");"));

返回正确格式的JSONP WCF

谢谢那个没用的家伙,他否决了我的合法问题…