2013-04-08 56 views
0

這裏是DnnApiController文檔我遵循的信如何使用Fiddler調試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. 嘗試運行類庫項目本身的幾個選項 - 這將需要類庫項目轉換成某種形式的網絡的應用項目。

  2. 創建一個MVC 4 Web API項目並添加相應的程序集和配置,建議在Dnn web api tips =這看起來像是最好的選擇,我可能會先嚐試一個。

  3. 將我創建的類添加到最新版本的Dnn的本地IIS安裝中的DestktopModules下的文件夾結構 - 這不適用於IIS Express。

  4. 如果我想使用IIS Express,我可以將這些類添加到文件系統版本的Dnn中的桌面模塊下的文件夾結構中 - 這可能會起作用。

+0

當你瀏覽到GetPublicRoles方法時,它會給你什麼錯誤?您需要將該類添加到DotNetNuke安裝中的(bin)文件夾中。 – 2013-04-10 21:53:34

回答

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模塊用戶控制

<%@ 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> 

我也有得到一個未找到響應的問題UI代碼。問題是我用一個'。'使用模塊名稱。在裏面。當我拿着'。'時脫離模塊名稱,它工作。

+0

而不是返回一個JSON字符串,你應該嘗試返回對象本身。然後你賦予客戶端指定應該如何序列化的能力(即序列化不再是你的控制器的問題,而是由框架來處理)。 – bdukes 2014-03-20 14:12:19

相關問題