Asp.net web api 如何使用Fiddler调试DnnApiController?
这是DnnApiController文档,我严格遵循了它 不幸的是,文档没有解释如何将类库集成到Dnn中。文档似乎表明可以浏览在本地IIS上配置的Dnn解决方案,例如Asp.net web api 如何使用Fiddler调试DnnApiController?,asp.net-web-api,dotnetnuke,Asp.net Web Api,Dotnetnuke,这是DnnApiController文档,我严格遵循了它 不幸的是,文档没有解释如何将类库集成到Dnn中。文档似乎表明可以浏览在本地IIS上配置的Dnn解决方案,例如 http://dotnetnuke/DesktopModules/MyServices/API/RoleSubScription/GetPublicRoles 其中RoleSubscription是RoleSubscriptionController,GetPublicRoles是GET方法 我已经通过Fiddler调试了一个
http://dotnetnuke/DesktopModules/MyServices/API/RoleSubScription/GetPublicRoles
其中RoleSubscription是RoleSubscriptionController,GetPublicRoles是GET方法
我已经通过Fiddler调试了一个Web API控制器方法,但是我使用了MVC4 Wep API项目,它工作得非常完美,我能够使用IIS express和Fiddler composer使用IIS express Url进行调试
在我看来,有几个选项可以调试我创建的DnnApiController
看看这个HelloWorld示例,看看它是否对您有所帮助
我让它工作了,谢谢。上面链接中的方法确实有效。我使用了一个类库,并将构建目标指向DNN的主bin文件夹。我用两种方式调试它,首先使用示例中建议的URL结构,然后向DNN添加一个模块,并使用jQuery.ajax调用访问WebAPI方法。我使用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>
IngenMobile DNN内容查看器
$(文档).ready(函数(){
$(“#getDnn”)。单击(函数(){
var id=$(“#id”).val();
GetDnnContent(id);
});
});
函数GetDnnContent(moduleId){
jQuery.support.cors=true;
$.ajax({
url:'DesktopModules/DnnModule/api/DnnContent/GetContent?id='+id,
键入:“GET”,
数据类型:“json”,
成功:功能(数据){
var obj=$.parseJSON(数据);
$('#result').html(“标题:+obj.Title+”“+”内容:+htmlDecode(obj.Content));
},
错误:功能(请求、状态、错误){
$('#result').html('错误:'+request.statusText);
}
});
}
函数htmlDecode(值){
如果(值){
返回$('').html(value.text();
}否则{
返回“”;
}
}
输入id:
我确实遇到了一个问题,没有找到响应。问题是我使用了一个模块名,其中有一个“.”。当我从模块名中去掉“.”时,它起作用了 当您浏览到GetPublicRoles方法时,它会给您带来什么错误?您需要将该类添加到DotNetNuke安装中的(bin)文件夹中。您应该尝试返回对象本身,而不是返回JSON字符串。然后让客户机能够指定如何序列化它(即序列化不再是控制器的问题,而是由框架负责)。