LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C# ASP.NET MVC凈化版WebAPI框架

admin
2025年6月30日 8:16 本文熱度 244

前言


我們都知道WebAPI是依賴于ASP.NET MVC,所以想創建WebAPI就需要先創建一個ASP.NET MVC項目。


但用Visual Studio創建的MVC項目通常會帶很多功能,而這些功能,很多是我們并不想用的,或者我們想用其他開源控件代替它。


而這樣雜亂的起始項目,對于我們這種有精神潔癖的開發者而言,簡直是折磨。


所以,讓我們編寫一個簡潔版本的WebAPI來凈化世界吧。


凈化版WebAPI預覽


首先,我們先看下凈化版WebAPI的結構。



如上圖所示,代碼結構很簡單,除開配置文件,整個Web項目只有2個文件;而需要被調用的WebAPI都被封裝到了WebAPI程序集中了。


接下來我們一起看下編寫這個凈化版WebAPI的過程吧。


凈化版WebAPI編寫


WebApiConfig


首先,引入必要的Dll,如下圖所示。



然后,我們編寫Web項目的寫WebApiConfig;代碼如下:


public static class WebApiConfig
{
   public static void Register(HttpConfiguration config)
   
{
       config.Filters.Add(new WebApiAttribute());
       // 解決json序列化時的循環引用問題
   config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
       // 對 JSON 數據使用混合大小寫。跟屬性名同樣的大小.輸出
    config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new DefaultContractResolver();
       // Web API 路由
       config.MapHttpAttributeRoutes();
       config.Routes.MapHttpRoute(
           name: "DefaultApi",
           routeTemplate: "webapi/{controller}/{id}",
           defaults: new { id = RouteParameter.Optional }
       );
   }
}


可以看到WebApiConfig是個靜態類中,我們在其中創建了靜態注冊方法Register,在方法內,我們主要在做一件事,那就是為HttpConfiguration對象做配置。


而在配置中,我們將WepApi的路由配置成了webapi/{controller}/{id},也就是說,我們的WebAPI未來的訪問地址將為【http://localhost:5180/webapi/Login】這樣的模式。


在WebApiConfig類中,我們還用到了這樣一個類WebApiAttribute,我們在為HttpConfiguration對象的Filters屬性,添加了這個類的對象。


通過Filters屬性這個字樣,我們可以得出,這個類主要應用應該是過濾。


下面我們看一下這個類的代碼:


[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
public class WebApiAttribute : ActionFilterAttribute
{
   public override void OnActionExecuting(HttpActionContext actionContext)
   
{
       //API執行前觸發
       if (true)//當前設置,所有API都可以被調用
       {
           base.OnActionExecuting(actionContext);
       }
       else
       {
           throw new Exception("Error");
       }
   }
   public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
   
{
       //API執行后觸發 若發生例外則不在這邊處理
       if (actionExecutedContext.Exception != null)
           return;
       base.OnActionExecuted(actionExecutedContext);
   }
}


通過閱讀代碼,我們應該可以發現,這是一個AOP的過濾器。


在執行真正WebAPI之前,會先進入這里進行過濾,過濾通過的API,才會調用 base.OnActionExecuting(actionContext)方法進行調用和執行。


結束調用同理,結束調用前,會在該類中進行攔截和過濾處理。


配置文件


WebApiConfig編寫結束了,現在,我們需要將這個靜態類注冊到項目中。


打開Global.asax文件,編寫如下代碼:


protected void Application_Start()
{
   GlobalConfiguration.Configure(WebApiConfig.Register);
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();//刪除XML格式 回應
}


可以看到,我們已通過Configure方法,將我們編寫好的WebApiConfig添加到了全局配置中了。


因為網站訪問都存在跨域問題,所以我們再向Global.asax中添加如下代碼處理:


protected void Application_BeginRequest(object sender, System.EventArgs e)
{
   var req = System.Web.HttpContext.Current.Request;
   if (req.HttpMethod == "OPTIONS")//過濾options請求,用于js跨域
   {
       Response.StatusCode = 200;
       Response.SubStatusCode = 200;
       Response.End();
   }
}


到此Web項目的編寫就完成了,下面我們在WebAPI程序集中,編寫個簡單的WebAPI,代碼如下:


public class LoginController : BaseApiController
{
   public BaseResult Get()
   
{
       try
       {
           return new BaseResult() { IsSuccess=true };
       }
       catch (Exception ex)
       {
           throw ex;
       }
   }
}
public class BaseApiController : ApiController
{  
   public string Options()
   
{
       return null;
   }
}


然后我們運行網站,進行WebAPI訪問。



如上圖所示,我們的WebAPI訪問成功,到此C#凈化版WebAPI框架就介紹完了。


Github地址:https://github.com/kiba518/WebApi


閱讀原文:原文鏈接


該文章在 2025/7/1 22:50:45 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
日本国产欧美大码a蜜糖视频 | 一级中文字幕免费看 | 亚洲欧美老师机在线AⅤ | 日韩精品中文无线码 | 亚洲国产综合精品中文字幕 | 综合久久性色AⅤ |