如何使用Fiddler调试DnnApiController?

时间:2013-04-08 14:45:59

标签: asp.net-web-api dotnetnuke

这是我在信中所遵循的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

  1. 尝试运行类库项目本身 - 这需要将类库项目转换为某种Web应用程序项目。

  2. 创建一个MVC 4 Web API项目,并按照Dnn web api tips中的建议添加相应的程序集和配置=这看起来是最好的选择,也是我可能会先尝试的选项。

    < / LI>
  3. 将我创建的类添加到最新版本Dnn的本地IIS安装中DestktopModules下的文件夹结构中 - 这不适用于IIS Express。

  4. 如果我想使用IIS express,我可以在我的Dnn文件系统版本的桌面模块下将这些类添加到文件夹结构中 - 这可能有效。

2 个答案:

答案 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示例,看看它是否对您有所帮助。

DotNetNuke WebAPI HelloWorld Example – Part One