Controller怎么在ASP.NET Core項(xiàng)目中使用?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供羅山網(wǎng)站建設(shè)、羅山做網(wǎng)站、羅山網(wǎng)站設(shè)計(jì)、羅山網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、羅山企業(yè)網(wǎng)站模板建站服務(wù),十多年羅山做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。ASP.NET CORE出現(xiàn)之前我們實(shí)現(xiàn)的Controller,MVC都繼承自Controller基類,WebApi的話繼承自ApiController。現(xiàn)在ASP.NET CORE把MVC跟WebApi合并了,已經(jīng)不再區(qū)分MVC或者WebApi。ASP.NET CORE的Controller繼承結(jié)構(gòu)也發(fā)生了變化。我們看其他示例的時(shí)候會(huì)發(fā)現(xiàn)有些繼承自Controller有些繼承自ControllerBase。事實(shí)上ControllerBase是Controller的基類。也就是說如果你繼承自Controller,其實(shí)就是繼承了ControllerBase。那什么時(shí)候該選擇直接繼承ControllerBase呢?
ControllerBase
我們先看看ControllerBase的元數(shù)據(jù):
很長并沒有截全。可以看到ControllerBase是個(gè)抽象類,并且實(shí)現(xiàn)了大量的虛方法。這些虛方法大都是對(duì)應(yīng)了Http的狀態(tài)碼。
比如:
public virtual OkResult Ok(); //http status 200 public virtual NotFoundResult NotFound(); //http status 404 public virtual ForbidResult Forbid(); //http status 403 public virtual CreatedResult Created(Uri uri, [ActionResultObjectValue] object value); // http status 201 ...還有很多很多...
顯然這是為Restful Api設(shè)計(jì)的基類,所以當(dāng)你要設(shè)計(jì)一個(gè)Restful(web api)接口的時(shí)候可以選擇繼承自ControllerBase,它已經(jīng)可以滿足你的需求。
Controller
查看下Controller的元數(shù)據(jù):
Controller也是一個(gè)抽象類,繼承自ControllerBase,并且繼承了幾個(gè)接口。很明顯Controller比ControllerBase多的內(nèi)容主要是一些跟MVC打交道的東西。
比如:Viewbag、Viewdata屬性,Json、View方法等:
public dynamic ViewBag { get; } public ViewDataDictionary ViewData { get; set; } public virtual JsonResult Json(object data); public virtual ViewResult View(); ...
所以如果你是需要實(shí)現(xiàn)一個(gè)MVC系統(tǒng),想要使用cshtml模板跟razor試圖引擎渲染頁面則需要繼承Controller。
POCO Controller
除了繼承Controller、ControllerBase之外,ASP.NET CORE框架可以讓你的POCO類直接變成Controller。
使用“Controller”后綴
下面的代碼,TestController可以正常工作嗎?
[Route("api/[controller]")] public class TestController { [HttpGet] public string Get() { return "TestController"; } }
運(yùn)行一下:
雖然TestController類并沒有繼承自任何類,但是他確實(shí)可以在ASP.NET CORE框架內(nèi)正常工作。ASP.NET CORE框架默認(rèn)會(huì)查找后綴為“Controller”的類,并把它當(dāng)做真正的Controller使用,在路由系統(tǒng)最終匹配Controller的時(shí)候它也會(huì)被嘗試匹配。
使用ControllerAttribute
如果你的控制器類有什么特別需求,連類名都不想加入“Controller”的后綴,那么還有一種方法就是使用ControllerAttribute。
[Controller] [Route("api/[controller]")] public class POCO { [HttpGet] public string Get() { return "POCOController"; } }
運(yùn)行一下:
POCO類并沒有繼承自任何類,并且也沒有“Controller”后綴命名,但是因?yàn)樗粯?biāo)記了ControllerAttribute同樣會(huì)被ASP.NET CORE框架認(rèn)為是一個(gè)Controller。在路由系統(tǒng)最終匹配Controller的時(shí)候它也會(huì)被嘗試匹配。
使用NonControllerAttribute
如果你的一個(gè)類名恰巧包含“Controller”的后綴,但你并不想ASP.NET CORE框架發(fā)現(xiàn)它,你可以在類上加上NonControllerAttribute。這樣ASP.NET CORE框架就會(huì)忽略它。
改一下剛才的TestController,加上[NonController]:
[NonController] [Route("api/[controller]")] public class TestController { [HttpGet] public string Get() { return "TestController"; } }
運(yùn)行一下:
/api/test已經(jīng)匹配不到controller了。
總結(jié)
設(shè)計(jì)restful(web api)接口的時(shí)候可以繼承ControllerBase
設(shè)計(jì)MVC系統(tǒng)的時(shí)候可以繼承Controller
當(dāng)一個(gè)POCO類名稱包含"Controller"后綴或添加ControllerAttribute的時(shí)候框架會(huì)認(rèn)為這是一個(gè)控制器
當(dāng)一個(gè)類不想被框架當(dāng)做控制器的時(shí)候可以添加NonControllerAttribute
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,的支持。
標(biāo)題名稱:Controller怎么在ASP.NETCore項(xiàng)目中使用-創(chuàng)新互聯(lián)
本文來源:http://vcdvsql.cn/article44/dshhee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、網(wǎng)站排名、網(wǎng)站營銷、標(biāo)簽優(yōu)化、手機(jī)網(wǎng)站建設(shè)、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容