这是我在信中所遵循的DnnApiController文档
http://www.dotnetnuke.com/Resources/Blogs/EntryId/3541/WebAPI-Tips.aspx
不幸的是,该文档没有解释如何将类库集成到Dnn中。该文档似乎表明可以浏览在本地IIS上配置的Dnn解决方案,例如
http://dotnetnuke/DesktopModules/MyServices/API/RoleSubScription/GetPublicRoles
其中RoleSubscription是RoleSubscriptionController,GetPublicRoles是GET方法。
我已经通过Fiddler调试了一个Web API控制器方法,但是我使用了MVC 4 Wep API项目并且它完美无缺,我能够使用IIS express和使用IIS express Url的Fiddler编写器进行调试。
正如我所看到的,有几个选项可以调试我创建的这个DnnApiController
尝试运行类库项目本身 - 这需要将类库项目转换为某种Web应用程序项目。
创建一个MVC 4 Web API项目,并按照Dnn web api tips中的建议添加相应的程序集和配置=这看起来是最好的选择,也是我可能会先尝试的选项。
< / LI>将我创建的类添加到最新版本Dnn的本地IIS安装中DestktopModules下的文件夹结构中 - 这不适用于IIS Express。
如果我想使用IIS express,我可以在我的Dnn文件系统版本的桌面模块下将这些类添加到文件夹结构中 - 这可能有效。
答案 0 :(得分:1)
我得到了它的工作,谢谢。上面链接中的方法确实有效。我使用了一个类库,并将构建目标指向DNN的主bin文件夹。我以两种方式调试它,首先使用示例中建议的URL结构,然后我将模块添加到DNN并使用jQuery .ajax调用访问Web API方法。我使用Newtonsoft.Json将DnnContent对象转换为json。
这是DnnApiController类
using System.Net;
using System.Net.Http;
using System.Web.Http;
using DotNetNuke.Web.Api;
using Newtonsoft.Json;
namespace DnnModule
{
public class DnnContentController : DnnApiController
{
private IDnnContentRepository _dbRepository;
public DnnContentController()
{
_dbRepository = new DnnContentRepository();
}
[AllowAnonymous]
[HttpGet]
public HttpResponseMessage GetContent(int id)
{
if (id != 0)
{
var dnnContent = new DnnContent
{
Content = _dbRepository.GetContent(id),
Title = _dbRepository.GetTitle(id)
};
return Request.CreateResponse(HttpStatusCode.OK, JsonConvert.SerializeObject(dnnContent));
}
return Request.CreateResponse(HttpStatusCode.BadRequest, JsonConvert.SerializeObject(string.Empty));
}
}
}
public class DnnContent
{
public string Content { get; set; }
public string Title { get; set; }
}
以下是Dnn模块用户控件的UI代码
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="DnnContentViewer.ascx.cs" Inherits="DnnModule.DnnContentViewer" %>
<h2>IngenMobile DNN Content Viewer</h2>
<script type="text/javascript">
$(document).ready(function () {
$("#getDnn").click(function () {
var id = $("#id").val();
GetDnnContent(id);
});
});
function GetDnnContent(moduleId) {
jQuery.support.cors = true;
$.ajax({
url: 'DesktopModules/DnnModule/api/DnnContent/GetContent?id=' + id,
type: 'GET',
dataType: 'json',
success: function (data) {
var obj = $.parseJSON(data);
$('#result').html("Title: " + obj.Title + "</br>" + "Content: " + htmlDecode(obj.Content));
},
error: function (request, status, error) {
$('#result').html('Error: ' + request.statusText);
}
});
}
function htmlDecode(value) {
if (value) {
return $('<div />').html(value).text();
} else {
return '';
}
}
</script>
Enter id: <input type="text" id="id" value="" />
<input id="getDnn" type="button" value="Submit" />
<hr/>
<div id="result"></div>
我确实遇到了未找到回复的问题。问题是我使用的模块名称是&#39;。&#39;在里面。当我选择&#39;。&#39;在模块名称之外,它起作用了。
答案 1 :(得分:-1)
查看此HelloWorld示例,看看它是否对您有所帮助。