1、新建项目。有两种途径:一种是建立普通的类库;另一种是通过VS2012中的模板(http://christoctemplate.codeplex.com/)建立一个正规额Mudule项目。为了讲解方便,我们使用第二种方式。
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
3、新建一文件夹用来存储WebApi相关文件,此处我们命名为“WebApi”,添加路由类“RouteMapper.cs”和测试类“WelcomeController.cs(控制器添加规则也要遵循MVC4.0 WebAPI规则,以Controller结尾)”。注意:添加时,两个均为类文件,而不是(特别是第二个)WebApi类。如下图:
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、示例: