我得到它的工作,谢谢。上面链接中的方法确实有效。我使用了一个类库并将构建目标指向 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>
我确实遇到了未找到响应的问题。问题是我使用了带有“。”的模块名称。在里面。当我拿了'。在模块名称之外,它起作用了。