HttpRoutes - 它们是如何工作的?

时间:2013-08-28 14:42:38

标签: ajax json dotnetnuke data-access-layer

我正在努力使用ajax-reader / JSON的URL。每次我认为我理解它,似乎我没有。 请问,任何人都可以解释这背后的逻辑???

我有这个控制器:

 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" });
        }
    }

我可以使用$ .ajax()在哪个URL读取数据,以及在浏览器中显示数据的URL是什么?

Thanx提前!

阿斯勒:)

2 个答案:

答案 0 :(得分: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和所需的DNN ajax插件。

  2. 在View.ascx中启动服务框架jquery插件,就像这里面的javascript脚本标签一样(S.O.不允许我包含它们)

  3. var modId = <%=ModuleId %>;    
    var sf = $.ServicesFramework(modId);
    
    1. 现在在单独的javascript文件中或在view.ascx控件中添加ajax函数
    2. 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.
        });
      }
      

      DNN jquery插件将构建类似于此的url(注意:142仅用于说明目的,将替换为实际的模块ID)

        

      / DesktopModules / MyProject的/ API /服务/ GetAllItems?的moduleId = 142

答案 1 :(得分:0)

网址将类似于

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

我有

的例子

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

但它们适用于DNN6,由于DNN 7的API更改,它们可能需要一些更新

您可以在https://dnnsimplearticle.codeplex.com/SourceControl/latest#cs/services/

看到具有服务层的DNN7模块