免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
ASP.NET Core中的Controller

ASP.NET CORE出現(xiàn)之前我們實(shí)現(xiàn)的Controller,MVC都繼承自Controller基類,WebApi的話繼承自ApiController?,F(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ù):


很長(zhǎng)并沒有截全??梢钥吹紺ontrollerBase是個(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試圖引擎渲染頁(yè)面則需要繼承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é)

  1. 設(shè)計(jì)restful(web api)接口的時(shí)候可以繼承ControllerBase
  2. 設(shè)計(jì)MVC系統(tǒng)的時(shí)候可以繼承Controller
  3. 當(dāng)一個(gè)POCO類名稱包含"Controller"后綴或添加ControllerAttribute的時(shí)候框架會(huì)認(rèn)為這是一個(gè)控制器
  4. 當(dāng)一個(gè)類不想被框架當(dāng)做控制器的時(shí)候可以添加NonControllerAttribute
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
ASP.NET Core中的Action的返回值類型
ASP.NET Core WebAPI 學(xué)習(xí)筆記(2): Web API Demo
dotnet core開發(fā)體驗(yàn)之開始MVC
Asp.net core 3.1+EF Core2.2.6+Oracle.EntityFrameworkCore2.1.19連接Oracle數(shù)據(jù)庫(kù)
Do You Kown Asp.Net Core -- Asp.Net Core 2.0 未來(lái)web開發(fā)新趨勢(shì) Razor Page
在Asp.Net Core中使用ModelConvention實(shí)現(xiàn)全局過濾器隔離
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服