亚洲乱色熟女一区二区三区丝袜,天堂√中文最新版在线,亚洲精品乱码久久久久久蜜桃图片,香蕉久久久久久av成人,欧美丰满熟妇bbb久久久

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

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

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

前言


我們都知道WebAPI是依賴(lài)于ASP.NET MVC,所以想創(chuàng)建WebAPI就需要先創(chuàng)建一個(gè)ASP.NET MVC項(xiàng)目。


但用Visual Studio創(chuàng)建的MVC項(xiàng)目通常會(huì)帶很多功能,而這些功能,很多是我們并不想用的,或者我們想用其他開(kāi)源控件代替它。


而這樣雜亂的起始項(xiàng)目,對(duì)于我們這種有精神潔癖的開(kāi)發(fā)者而言,簡(jiǎn)直是折磨。


所以,讓我們編寫(xiě)一個(gè)簡(jiǎn)潔版本的WebAPI來(lái)凈化世界吧。


凈化版WebAPI預(yù)覽


首先,我們先看下凈化版WebAPI的結(jié)構(gòu)。



如上圖所示,代碼結(jié)構(gòu)很簡(jiǎn)單,除開(kāi)配置文件,整個(gè)Web項(xiàng)目只有2個(gè)文件;而需要被調(diào)用的WebAPI都被封裝到了WebAPI程序集中了。


接下來(lái)我們一起看下編寫(xiě)這個(gè)凈化版WebAPI的過(guò)程吧。


凈化版WebAPI編寫(xiě)


WebApiConfig


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



然后,我們編寫(xiě)Web項(xiàng)目的寫(xiě)WebApiConfig;代碼如下:


public static class WebApiConfig
{
   public static void Register(HttpConfiguration config)
   
{
       config.Filters.Add(new WebApiAttribute());
       // 解決json序列化時(shí)的循環(huán)引用問(wèn)題
   config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
       // 對(duì) JSON 數(shù)據(jù)使用混合大小寫(xiě)。跟屬性名同樣的大小.輸出
    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是個(gè)靜態(tài)類(lèi)中,我們?cè)谄渲袆?chuàng)建了靜態(tài)注冊(cè)方法Register,在方法內(nèi),我們主要在做一件事,那就是為HttpConfiguration對(duì)象做配置。


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


在WebApiConfig類(lèi)中,我們還用到了這樣一個(gè)類(lèi)WebApiAttribute,我們?cè)跒镠ttpConfiguration對(duì)象的Filters屬性,添加了這個(gè)類(lèi)的對(duì)象。


通過(guò)Filters屬性這個(gè)字樣,我們可以得出,這個(gè)類(lèi)主要應(yīng)用應(yīng)該是過(guò)濾。


下面我們看一下這個(gè)類(lèi)的代碼:


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


通過(guò)閱讀代碼,我們應(yīng)該可以發(fā)現(xiàn),這是一個(gè)AOP的過(guò)濾器。


在執(zhí)行真正WebAPI之前,會(huì)先進(jìn)入這里進(jìn)行過(guò)濾,過(guò)濾通過(guò)的API,才會(huì)調(diào)用 base.OnActionExecuting(actionContext)方法進(jìn)行調(diào)用和執(zhí)行。


結(jié)束調(diào)用同理,結(jié)束調(diào)用前,會(huì)在該類(lèi)中進(jìn)行攔截和過(guò)濾處理。


配置文件


WebApiConfig編寫(xiě)結(jié)束了,現(xiàn)在,我們需要將這個(gè)靜態(tài)類(lèi)注冊(cè)到項(xiàng)目中。


打開(kāi)Global.asax文件,編寫(xiě)如下代碼:


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


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


因?yàn)榫W(wǎng)站訪問(wèn)都存在跨域問(wèn)題,所以我們?cè)傧騁lobal.asax中添加如下代碼處理:


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


到此Web項(xiàng)目的編寫(xiě)就完成了,下面我們?cè)赪ebAPI程序集中,編寫(xiě)個(gè)簡(jiǎn)單的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;
   }
}


然后我們運(yùn)行網(wǎng)站,進(jìn)行WebAPI訪問(wèn)。



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


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


閱讀原文:原文鏈接


該文章在 2025/7/1 22:50:45 編輯過(guò)
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved