Tuesday, March 12, 2019

Cách lập trình module Web API trong DotnetNuke

Kể từ DNN ver7 trở lên thì framework này đã hỗ trợ tạo web api một cách rất đơn giản

Điều kiện cần là trong thư mục bin của framework có các dll sau đây
  • DotNetNuke.dll
  • DotNetNuke.Web.dll
  • System.Net.Http.dll
  • System.Net.Http.Formatting.dll
  • System.Web.Http.dll
Bước đầu tiên là tạo một module mới, cách tạo module mới thì mình không nêu ở đây

Tiếp theo là tạo một class RouterMapper để làm nhiệm vụ router cho api trỏ vào đúng hàm mình viết trong module
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using DotNetNuke.Web.Api;

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

ở trên bạn đã khai báo folder hệ thống chứa code, sau đó là tên controller (class xử lý) và action là tên phương thức (method xử lý), cái cuối cùng sau new[] các bạn để tên namespace của module đó nha

sau khi tạo router xong thì api sẽ ở địa chỉ này
/desktopmodules/MyModuleName.WebAPI/api/{controller}/{action}

Bây giờ thì tạo controller với action thôi

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Http;
using DotNetNuke.Web.Api;
using System.Net.Http;
using System.Net;
using System.Text;

namespace MyModuleName.WebAPI {
    public class HelloWorldController : DnnApiController {
        [HttpPost]
        public HttpResponseMessage PostMyName([FromBody] yourName) {
            try {
                return Request.CreateResponse(HttpStatusCode.OK, "Hello World " + yourName);
            } catch (Exception ex) {
                return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message);
            }
        }
  
 [HttpGet]
        public HttpResponseMessage GetMyName([FromBody] yourName) {
            try {
                return Request.CreateResponse(HttpStatusCode.OK, "Hello World " + yourName);
            } catch (Exception ex) {
                return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message);
            }
        }
  
 [HttpPost]
 [DnnAuthorize]
        public HttpResponseMessage PostMyName([FromBody] PersonInfo objPerson) {
            try {
                return Request.CreateResponse(HttpStatusCode.OK, "Hello World " + objPerson.FirstName + " " + objPerson.LastName);
            } catch (Exception ex) {
                return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message);
            }
        }
    } }

Ở trên ta vừa tạo Controller có tên là HelloWorld (HelloWorldController) kế thừa từ  DnnApiController

Có 2 attribute mà ta cần chú là là [HttpPost] và [HttpGet] là để khai báo method Post và Get của giao thức http, trong phần parameter nếu truyền dữ liệu vào body thì ta thêm [FromBody] vào trước

Reponse thì ta có thể tự thiết kế để trả về object kiểu gì mà ta muốn

Đơn giản vậy thôi nha, vừa rồi mình đã chỉ cho các bạn thiết kế web api
/desktopmodules/MyModuleName.WebAPI/api/HelloWorld/GetMyName 
trong DotnetNuke nha, chúc các bạn một ngày nghiên cứu công nghệ vui vẻ

No comments:

Post a Comment

Tuyệt chiêu tránh khỏi sự chậm chạm của Entity Framework

Nhìn chung mà nói, tôi chả lo lắng gì nhiều về câu lệnh LINQ của tôi khi làm việc với Entity Fra...