我們公司業務部門提出了一個合同管理的需求,
與金蝶的合同中沒有包括ERP或業務系統,
只有雲之家。
為了公司有限的IT預算,拼了。
步驟:
1、教程:使用 ASP.NET Core 建立 Web API
這一步,需要你用5分鐘,生產一個Webapi專案。
2、使用 Nginx 在 Linux 上託管 ASP.NET Core
這一步,需要你用2分鐘,服務埠5000釋出到機器的80埠。
這一步,需要你設定一個雲之家能找到服務的域名,我選的是內網穿透。
4、開始調整需要的程式碼。
4.1 修改api Controller 名稱
* 如果雲之家後期測試找不到你的服務,我也不知道什麼原因。
反正Visual Studio新建asp.net core MVC會有可能出現不明原因的訪問不了。
按照第1個步驟新建一個webapi 一定沒錯
有幾個檢查點需要注意,
4.1.1 這設定訪問的路徑,一般情況下不用改。釋出後都在根地址上訪問。
例如, OptionsDataSourceController 訪問地址就是http://localhost:5000/OptionsDataSource
4.2.1 你可以忽略[HttpGet],你可以保留用作在瀏覽器測試伺服器是否正常。
4.2 你要修改好[HttpPost],整個*****Controller.cs只會有一個[HttpPost] Post(....)
5、根據需要定義OptionsDataSource等配套的資料格式。歡迎參考我的.cs檔案,基本與雲之家要求定義的一致即可。
5.1 在PageListData處理資料的分頁
5.2 新增資料篩選邏輯
6. 釋出後,對接你的第三方資料互聯外掛即可。
以上寫的是路徑方法和要點,開發出的體驗基本雲之家的開發體驗一致。
如果您覺得有有幫助,記得點一下分享。
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using WebApi.Models; namespace WebApi.Controllers { [ApiController] [Route("[controller]")] public class OptionsDataSourceController : ControllerBase { private readonly ILogger<OptionsDataSourceController> _logger; public OptionsDataSourceController(ILogger<OptionsDataSourceController> logger) { _logger = logger; } //[HttpGet] //public ActionResult<OptionsDataSource<DataRowItem>> Get() //{ // ActionResult<OptionsDataSource<DataRowItem>> r = new ActionResult<OptionsDataSource<DataRowItem>>(new OptionsDataSource<DataRowItem>() // { // PageList = new PageListData<DataRowItem>() // { // ColList = new DataColumnItem[] { // new DataColumnItem(){ ColEnName="id"}, // new DataColumnItem(){ ColEnName="cz",ColZhName="材質",ShowName="true",WidgetType="textWidget"} // } // } // }); // r.Value.PageList.SetData(new DataRowItem[] { // new DataRowItem(){Id="1",Cz="塑膠" }, // new DataRowItem(){Id="2",Cz="玻璃" }, // new DataRowItem(){Id="3",Cz="不鏽鋼" } // }, 0); // r.Value.Success = true; // return r; //} [HttpPost] public ActionResult<OptionsDataSource<DataRowItem>> Post([FromBody] OptionsReqData reqarg ) { string firstString = "塑膠"; if (reqarg.Keyword != null) { firstString = reqarg.YzjInfo.Name; } ActionResult <OptionsDataSource<DataRowItem>> r=new ActionResult<OptionsDataSource<DataRowItem>>(new OptionsDataSource<DataRowItem>() { PageList = new PageListData<DataRowItem>() { ColList = new DataColumnItem[] { new DataColumnItem(){ ColEnName="id"}, new DataColumnItem(){ ColEnName="cz",ColZhName="材質",ShowName="true",WidgetType="textWidget"} } } }); r.Value.PageList.SetData(new DataRowItem[] { new DataRowItem(){Id="1",Cz=firstString }, new DataRowItem(){Id="2",Cz="玻璃" }, new DataRowItem(){Id="3",Cz="不鏽鋼" }, new DataRowItem(){Id="4",Cz="不鏽鋼" }, new DataRowItem(){Id="5",Cz="不鏽鋼" }, new DataRowItem(){Id="6",Cz="不鏽鋼" }, new DataRowItem(){Id="7",Cz="不鏽鋼" }, new DataRowItem(){Id="8",Cz="不鏽鋼" }, new DataRowItem(){Id="9",Cz="不鏽鋼" }, new DataRowItem(){Id="10",Cz="不鏽鋼" }, new DataRowItem(){Id="11",Cz="不鏽鋼" }, new DataRowItem(){Id="12",Cz="不鏽鋼" }, new DataRowItem(){Id="13",Cz="不鏽鋼" }, new DataRowItem(){Id="14",Cz="不鏽鋼" }, new DataRowItem(){Id="15",Cz="不鏽鋼" }, new DataRowItem(){Id="16",Cz="不鏽鋼" }, new DataRowItem(){Id="17",Cz="不鏽鋼" }, new DataRowItem(){Id="18",Cz="不鏽鋼" }, new DataRowItem(){Id="19",Cz="不鏽鋼" }, new DataRowItem(){Id="20",Cz="不鏽鋼" }, new DataRowItem(){Id="21",Cz="不鏽鋼" }, new DataRowItem(){Id="22",Cz="不鏽鋼" }, new DataRowItem(){Id="23",Cz="不鏽鋼" }, new DataRowItem(){Id="24",Cz="不鏽鋼" } }.Where(k=>k.Cz.Contains(reqarg.Keyword.Trim())).ToArray(), reqarg.CurPage, reqarg.PageSize); r.Value.Success = true; return r; } } }
using System; using System.Linq; namespace WebApi.Models { public class OptionsDataSource<T> { public PageListData<T> PageList { get; set; } public string Error { get; set; } public int ErrorCode { get; set; } public bool Success { get; set; } } public class PageListData<T> { public int PageCount { get; set; } public int CurPage { get; set; } public int RowsCount { get; set; } public DataColumnItem[] ColList { get; set; } public T[] DataList { get; set; } public void SetData(T[] dataList, int curPage = 1, int pageSize = 10) { RowsCount = dataList.Length; PageCount = RowsCount / pageSize; CurPage = curPage; DataList = dataList.Skip((curPage - 1) * pageSize).Take(pageSize).ToArray(); } } public class DataColumnItem { public string ColZhName { get; set; } public string ColEnName { get; set; } public string ShowName { get; set; } public string WidgetType { get; set; } public string DateFormat { get; set; } } public class DataRowItem { public string Id { get; set; } public string Cz { get; set; } } public class OptionsReqData { public int CurPage { get; set; } public int PageSize { get; set; } public string Keyword { get; set; } public YzjInfo YzjInfo { get; set; } } public class YzjInfo { public string Eid { get; set; } public string Oid { get; set; } public string JobNo { get; set; } public string Name { get; set; } } }