2013-04-08 3 views
0

가 여기에 내가Fiddler를 사용하여 DnnApiController를 디버깅하는 방법은 무엇입니까?

http://www.dotnetnuke.com/Resources/Blogs/EntryId/3541/WebAPI-Tips.aspx

불행하게도 편지에 다음에 DnnApiController 문서이고, 문서는 DNN에 클래스 라이브러리를 통합하는 방법을 설명하지 않습니다. 문서는 RoleSubscription가 RoleSubscriptionController하고 GetPublicRoles는 GET 방식입니다 같은

http://dotnetnuke/DesktopModules/MyServices/API/RoleSubScription/GetPublicRoles 

로 지역 IIS에 구성된 DNN 솔루션을 검색하는 것이 가능하다는 것을 제안 나타납니다.

피들러를 통해 웹 API 컨트롤러 메소드를 디버깅했지만 MVC 4 Wep API 프로젝트를 사용하여 완벽하게 작동했으며 IIS 익스프레스를 사용하여 익스프레스 및 피들러 작곡가가 IIS 익스프레스 URL을 사용하여 디버깅 할 수있었습니다. 내가보기로

, 내가 클래스 라이브러리 프로젝트 자체를 실행하는

  1. 시도를 만든이 DnnApiController 디버깅을위한 몇 가지 옵션이 있습니다 -이 웹의 일종으로 클래스 라이브러리 프로젝트를 변환 필요 앱 프로젝트

  2. MVC 4 웹 API 프로젝트를 만들고 Dnn 웹 API 팁에 제안 된대로 적절한 어셈블리 및 구성을 추가하십시오.이 옵션이 가장 좋으며 아마도 가장 먼저 시도 할 것입니다.

  3. 내가 만든 클래스를 Dnn 최신 버전의 로컬 IIS 설치에서 DestktopModules 폴더 구조 아래에 추가하십시오. IIS 익스프레스에서 작동하지 않습니다.

  4. express를 사용하고 싶다면 파일 시스템 버전 Dnn의 Desktop Modules에있는 폴더 구조에 클래스를 추가하면됩니다.

+0

GetPublicRoles 메서드를 탐색 할 때 어떤 오류가 발생합니까? 클래스를 DotNetNuke 설치 내의 (bin) 폴더에 추가해야합니다. –

답변

1

나는, 덕분에 작업을 얻었다. 위 링크의 접근 방식이 효과적입니다. 클래스 라이브러리를 사용하고 빌드 대상을 DNN의 기본 bin 폴더로 지정했습니다. 첫 번째 예제에서 제안 된 URL 구조를 사용하여 두 가지 방법으로 디버깅 한 다음 DNN에 모듈을 추가하고 jQuery .ajax 호출을 사용하여 웹 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; } 
} 

인 I가없는 반응을 얻고에 문제가했던 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

관련 문제