Your browser doesn't support the features required by impress.js, so you are presented with a simplified version of this presentation.

For the best experience please use the latest version of one of the following browsers:

Designing a Mobile-Enabling API

Brian Dukes, Engage

April 13, 2013 Southern Fried Day of DotNetNuke Charlotte NC

DotNetNuke PowerDNN Applied Innovations

What does it look like to use the Services Framework?

Agenda

Technology Overview

Routes

Route Example

        /*GET /DesktopModules/Example/S/API/Example.ashx*/
        namespace Example.Dnn.Services {
            using DotNetNuke.Web.Api;

            public class Mapperator : IServiceRouteMapper {
                public void RegisterRoutes(IMapRoute mapper) {
                    mapper.MapHttpRoute(
                        moduleFolderName: "Example/S", 
                        routeName: "default",
                        url: "{controller}.ashx", 
                        namespaces: new[] { 
                            "Example.Dnn.Services",
                        });
                }
            }
        }
        

Controllers

Controller Example

        namespace Example.Dnn.Services {
            using System.Net;
            using System.Net.Http;
            using DotNetNuke.Web.Api;

            public class ExampleController : DnnApiController {
                public HttpResponseMessage GetHello() {
                    return this.Request.CreateResponse(
                        HttpStatusCode.OK, 
                        new { 
                            number = 1, 
                            text = "Hi!",
                    });
                }
            }
        }
        

Authorization

Authorization

Authentication

DNN Context

Usage – Request Scripts

        using DotNetNuke.Framework;

        public class MyModuleControl : ModuleView<MyViewModel> {
            protected MyModuleControl() {
                ServicesFramework.Instance.RequestAjaxAntiForgerySupport();
            }
        }
        

Usage – Ajax Request

        var sf = $.ServicesFramework(<%:ModuleContext.ModuleId%>);
        $.ajax({
            type: 'GET',
            url: sf.getServiceRoot('Example/S') + 'Example.ashx',
            beforeSend: sf.setModuleHeaders,
            data: {}
        }).done(function (data) { /*...*/ })
          .fail(function (xhr, status) { /*...*/ });
        

Usage – Phone Request

            var requestUri = new Uri("http://dnn7.dev/DesktopModules/Example/S/API/Example.ashx");
            var request = new HttpRequestMessage(HttpMethod.Get, requestUri);
            request.Headers.Add("ModuleId", "1740");
            request.Headers.Add("TabId", "56");

            var client = new HttpClient(new HttpClientHandler { 
                Credentials = new NetworkCredential("host", "pa$$") 
            });
            var response = await client.SendAsync(request);
            if (!response.IsSuccessStatusCode) {
                // TODO: show error
                return;
            }

            var json = await response.Content.ReadAsStringAsync();
        

Wrap Up

More Info

Thanks to all our Generous Sponsors!

PowerDNN Applied Innovations Iowa Computer Gurus ettain group University of North Carolina at Charlotte Logical Advantage DNN Admins Cool Coyotes Engage Software Aspose Arrow Consulting & Design Spiffy Web Team PointClick Technologies 2DNN Web Sites Creative Moore Creative Company

Use a spacebar or arrow keys to navigate