我正在努力使用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提前!
阿斯勒:)
答案 0 :(得分:2)
我就是这样做的(注意:这只适用于DNN6.2及以上版本);
在View.ascx.cs中添加
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
ServicesFramework.Instance.RequestAjaxScriptSupport();
ServicesFramework.Instance.RequestAjaxAntiForgerySupport();
jQuery.RequestDnnPluginsRegistration();
}
这可确保添加jquery和所需的DNN ajax插件。
在View.ascx中启动服务框架jquery插件,就像这里面的javascript脚本标签一样(S.O.不允许我包含它们)
var modId = <%=ModuleId %>; var sf = $.ServicesFramework(modId);
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模块