DNN 7.0的Module中调用WebApi
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、示例: