Thursday, July 5, 2012

WCF Json Service Method Argument null Problem

Do NOT use "url" as a argument name.

Wcf Service Method

 [OperationContract]
 [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json,
         RequestFormat= WebMessageFormat.Json)]
PageDTO PageByUrl(String url,String language);  --> PageDTO PageByUrl(String title,String language); 


-----------------------------------------------------------------------

Requested Url:

http://localhost:2222/tr-TR/test-page-1
-----------------------------------------------------------------------


Jquery Ajax Call


<script type="text/javascript">

    $(document).ready(function () {
     
        data = window.location.pathname.split("/");
        urlStr = data[data.length -1];
        languateStr = data[data.length - 2];

        var data = new Object();
        data.url = urlStr;   ---> data.title=urlStr;
        data.language = languateStr;

        //var xxx = $.toJSON(data);
        //result: {"url":" test-page-1","language":"tr-TR"}

        caller_dynamic(data);
    });


    var menuUrl = "http://localhost:9000/PublicService.svc/PageByUrl";

    function caller_dynamic(mydata) {
        $.support.cors = true;
        $.ajax({
            type: "POST",
            url: menuUrl,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            data: $.toJSON(mydata),
            success: function (data) {
                $("#content").html(data.Content);
            },
            error: function (xhr) {
                alert(xhr.responseText);
            }

        });
    }
     < /script>

---------------------------------------------------------------------

public PageDTO PageByUrl(String url, String language) --> (String title, String language)
        {
            try
            {
                var publicBS = unityContainer.Resolve();
                var page = publicBS.PageByUrl(title);
                return page;
            }
            catch (Exception ex)
            {
                throw DynFaultException.Instance.CreateFault(ex);
            }
        }



Conclusion

if url is null, do NOT panic. just change the name of the argument name url to title.





No comments:

Post a Comment