2017-12-19 17 views
0

먼저 미안하지만이 질문에 잘못 대답 한 경우. 웹 API 로직이 작성된 제 3 자 라이브러리 ([Link][1])가 있습니다. PDF 뷰어를 보여주는 DNN Custom 모듈이 있습니다. 그러나 뷰어를로드 할 때이 전화 http://dnndev.me/dvapi3/docuvieware3api/init/1에 대한 예외는 404입니다.웹 API 호출이 DNN 사이트에서 404 번을 반환했습니다.

DNN과 타사 도구 중 어디에서 문제가 발생했는지 확실하지 않습니다. 이 문제에 대한 도움을 주시면 감사하겠습니다.

UPDATE

WebAPI 컨트롤러 메타 데이터

namespace GdPicture14.WEB 
{ 
public class DocuVieware3ApiController : System.Web.Http.ApiController 
{ 
    public DocuVieware3ApiController(); 
    [System.Web.Http.ActionNameAttribute("init")] 
    [System.Web.Http.HttpPostAttribute] 
    public string init([System.Web.Http.FromBodyAttribute] object jsonString); 
} 
} 

RouteMapper.cs

using DotNetNuke.Web.Api; 
using GdPicture14.WEB; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Http; 

namespace DocumentViewer 
{ 
public class RouterMapper : IServiceRouteMapper 
{ 
    public void RegisterRoutes(IMapRoute mapRouteManager) 
    { 
     mapRouteManager.MapHttpRoute(
     "DocumentViewer", 
     "default", 
     "{controller}/{action}", 
     new string[] { "DocumentViewer" }); 
    } 
} 
} 
+0

컨트롤러 그래서 난 돈 DnnApiController 또는 기타 DNN 도우미에서 상속하지 않습니다 ' 이 문제가 어떻게 DNN에 특정 될 수 있는지보십시오. – Mickers

+0

@Mickers :'DocuVieware3ApiController '는'System.Web.Http.ApiController'를 상속받은 제 3 자 컨트롤러이며 편집/업데이트 할 수 없습니다. DNN 모듈에서 호출 된 모든 API가'DnnApiController'를 상속해야하는 것이 있습니까 ?? – DonMax

답변

0

은 내가 DNN 모듈에서 사용할 수있는 API 호출의 예를 가지고 내 VehiDataCollector module

당신은 @Mickers 같은 그런 a route mapper

public void RegisterRoutes(IMapRoute mapRouteManager) 
    { 
     mapRouteManager.MapHttpRoute("VehiDataCollector","Default", "{controller}.ashx/{action}", 
           new[] { "Christoc.Modules.VehiDataCollector.Services" }); 

     //mapRouteManager.MapHttpRoute("MyServices", "default", "{controller}/{action}", new {"MyServices"}); 
    } 

a controller that inherits from DnnApiController이 코멘트에 지적 제공해야

public class VehiDataCollectorController : DnnApiController 
    { 
     //URL to get the list of vehicles 

     [HttpGet] 
     //[DnnAuthorize()] 
     //TODO: make it so we can call without ModuleId to get a list of vehicles 
     [AllowAnonymous] 
     public HttpResponseMessage GetVehicles() 
     { 
      try 
      { 
       var mc = new ModuleController(); 
       var mi = mc.GetModuleByDefinition(0, "VehiDataCollector"); 
//TODO: assuming PortalId=0 if moduleid =0 
       return GetVehicles(mi.ModuleID); 
      } 
      catch (Exception exc) 
      { 
       DnnLog.Error(exc); //todo: obsolete 
       return Request.CreateResponse(HttpStatusCode.BadRequest, "Module Not On A Page, or No Vehicles Exist"); //todo: probably should localize that? 
      } 
     } 
    } 
+0

제 3 자 라이브러리 API의 Dnn 내부 API를 포함하여 모든 API 컨트롤러가'DnnApiController'에서 상속되어야 함을 의미합니다. NOT 'System.Web.Http.ApiController' ?? – DonMax

+0

아마도 그렇지는 않지만 DNN이 존재한다는 것을 알기 위해서는 반드시 routemapper를 사용해야합니다. –

+0

내 DNN 사용자 정의 모듈에서 이미'RouteMapper.cs'를 가지고 있습니다. 샘플 WebAPI를 작성했으며 웹 API 조치 메소드에는 액세스 할 수 있지만 타사 라이브러리 API 메소드에는 액세스 할 수 없습니다. – DonMax