DNN 7.0的Module中调用WebApi

1、新建项目。有两种途径:一种是建立普通的类库;另一种是通过VS2012中的模板(http://christoctemplate.codeplex.com/)建立一个正规额Mudule项目。为了讲解方便,我们使用第二种方式。

image

2、添加以下6个Dll引用(Dnn网站主目录下的Bin文件夹)

DotNetNuke.dll
DotNetNuke.Web.dll
System.Net.Http.dll
System.Net.Http.Formatting.dll
System.Web.Http.dll
System.Web

image

3、新建一文件夹用来存储WebApi相关文件,此处我们命名为“WebApi”,添加路由类“RouteMapper.cs”和测试类“WelcomeController.cs(控制器添加规则也要遵循MVC4.0 WebAPI规则,以Controller结尾)”。注意:添加时,两个均为类文件,而不是(特别是第二个)WebApi类。如下图:

image

RouteMapper.cs代码:

using System;
using DotNetNuke.Web.Api;
using System.Web.Http;

namespace Christoc.Modules.DNNModule1.WebApi
{
    public class RouteMapper : IServiceRouteMapper
    {
        public void RegisterRoutes(IMapRoute mapRouteManager)
        {
            mapRouteManager.MapHttpRoute("DNNModule1", "default", "{controller}/{action}/{name}", new { name = RouteParameter.Optional }, new[] { "Christoc.Modules.DNNModule1.WebApi" });
        }
    }
}

其中:mapRouteManager.MapHttpRoute格式为:

DNNModules1 –>  模块名

default –> 路由名称,随便起个名字。同MVC中的Web API

"{controller}/{action}/{name}" –> 控制器,行为,参数。同MVC中的Web API

new { name = RouteParameter.Optional }, –> name 参数的默认只,可省略。同MVC中的Web API

new[] { "Christoc.Modules.DNNModule1.WebApi" } –> 控制器所在的命名空间

WelcomeController.cs代码:

using System;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using DotNetNuke.Web.Api;

namespace Christoc.Modules.DNNModule1.WebApi
{
    /// <summary>
    /// API接口参数数据模型
    /// </summary>
    public class ApiDataContent
    {
        /// <summary>
        /// 自定义数据类型(Json格式)
        /// </summary>
        public object Data { get; set; }

        /// <summary>
        /// 用户权限授权码
        /// </summary>
        public string AuthKey { get; set; }
    }

    public class WelcomeController : DnnApiController
    {
        [AllowAnonymous]
        [HttpGet]
        public HttpResponseMessage HelloZhangps()
        {
            return Request.CreateResponse(HttpStatusCode.OK, "Hello Zhangps!");
        }

        [AllowAnonymous]
        [HttpGet]
        public HttpResponseMessage HelloWorld(string name)
        {
            return Request.CreateResponse(HttpStatusCode.OK, "Hello World!" + name);
        }

        [AllowAnonymous]
        [HttpPost]
        public HttpResponseMessage PostWorld(ApiDataContent content)
        {
            return Request.CreateResponse(HttpStatusCode.OK, "Post World!" + content.AuthKey);
        }
    }
}
其中:ApiDataContent 为复杂参数

4、Web API接口调用方法:/DesktopModules/DNNModule1/API/Welcome/PostWorld

5、示例:

image

posted on 2013-05-15 10:29  一路前行  阅读(495)  评论(0编辑  收藏  举报