2013-08-28 7 views
1

Я борюсь с URL-адресами для ajax-reader/JSON. Каждый раз, когда я думаю, что понимаю, кажется, что я не знаю. Пожалуйста, может кто-нибудь объяснить логику этого?HttpRoutes - как они работают?

Я получил этот контроллер:

public class ServiceController : DnnApiController 
    { 
     [AllowAnonymous] 
     [HttpGet] 
     public HttpResponseMessage GetAllItems(int moduleId) 
     { 
      MyProjectController controller = new MyProjectController(); 
      IEnumerable<ItemInfo> items = controller.GetAllItems(moduleId); 
      return Request.CreateResponse(HttpStatusCode.OK, items); 
     } 
    } 

Я получил эту Routemapper:

public class RouteMapper : IServiceRouteMapper 
    { 
     public void RegisterRoutes(IMapRoute mapRouteManager) 
     { 
      mapRouteManager.MapHttpRoute("MyProject", 
             "default", 
             "{controller}/{action}", 
             new[] { "MyCompany.MyProject.Services" }); 
     } 
    } 

В какой URL я могу прочитать данные с $ .ajax() и что это URL показывает мне данные в браузере?

Thanx in Advance!

Asle :)

ответ

2

Это, как я это сделать (Примечание: это будет работать только с DNN6.2 и выше);

  1. В View.ascx.cs добавить

    protected override void OnInit(EventArgs e) 
    { 
        base.OnInit(e); 
        ServicesFramework.Instance.RequestAjaxScriptSupport(); 
        ServicesFramework.Instance.RequestAjaxAntiForgerySupport(); 
        jQuery.RequestDnnPluginsRegistration(); 
    } 
    

    Это гарантирует, что JQuery и требуемые Ajax плагинов DNN добавлены.

  2. Инициировать рамочное услуги Jquery плагин в View.ascx, как это внутри тегов JavaScript сценариев (SO не позволил бы мне включить их)

var modId = <%=ModuleId %>;  
var sf = $.ServicesFramework(modId); 
  1. сейчас в отдельном файле javascript или в элементе управления view.ascx добавить функцию ajax
function getAllItems(){ 
    $.ajax({ 
    type:"GET", 
    url:sf.getServiceRoot("MyProject")+"Service/GetAllItems", 
    beforeSend:sf.setModuleHeaders, 
    data:{moduleId:modId}, 
    cache:false 
    }).done(function(data){ 
    alert("Success!"); 
    }).fail(function(){ 
    alert("Crashed!"); 
    }).always(function(){ 
    //something you want done whether passed or failed 
    //like hide progress bar, ajax spinner etc. 
    }); 
} 

JQuery плагин DNN будет строить URL, который будет выглядеть следующим образом (Примечание: 142 только для иллюстрации и будет заменить фактический идентификатор модуля)

/DesktopModules/MyProject/API/Сервис/GetAllItems? ModuleId = 142

+0

Thanx! Именно то, что я искал. Блестящий М. Мачуа! : D –

+1

@AsleG, рад слышать, что это сработало для вас.Пожалуйста, продолжайте и отметьте это как ответ, иначе ваш вопрос останется отмеченным как неотвеченный. Приветствия. –

+0

Действительно. Это ответ. :) Должен быть отмечен сейчас. –

0

URL-адрес будет что-то вроде

/desktopmodules/SlidePresentation/API/SlidePresetnation.ashx/ListOfSlides

У меня есть примеры на

https://slidepresentation.codeplex.com/SourceControl/latest

но они предназначены для DNN6, они могут потребовать несколько обновлений из-за изменений API для DNN 7

вы можете увидеть модуль DNN7, который имеет слой услуг на https://dnnsimplearticle.codeplex.com/SourceControl/latest#cs/services/