1

我正在为 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);
        }
    }

我得到了这个路由映射器:

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

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

提前感谢!

阿斯莱 :)

4

2 回答 2

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. 在 javascript 脚本标签中像这样在 View.ascx 中启动服务框架 jquery 插件(所以不允许我包含它们)

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

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

/DesktopModules/MyProject/API/Service/GetAllItems?moduleId=142

于 2013-08-29T03:16:52.557 回答
0

URL 将类似于

/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 模块

于 2013-08-28T16:16:51.710 回答