91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Controller怎么在ASP.NET Core項目中使用

發布時間:2021-01-13 16:41:06 來源:億速云 閱讀:253 作者:Leah 欄目:開發技術

Controller怎么在ASP.NET Core項目中使用?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

ASP.NET CORE出現之前我們實現的Controller,MVC都繼承自Controller基類,WebApi的話繼承自ApiController。現在ASP.NET CORE把MVC跟WebApi合并了,已經不再區分MVC或者WebApi。ASP.NET CORE的Controller繼承結構也發生了變化。我們看其他示例的時候會發現有些繼承自Controller有些繼承自ControllerBase。事實上ControllerBase是Controller的基類。也就是說如果你繼承自Controller,其實就是繼承了ControllerBase。那什么時候該選擇直接繼承ControllerBase呢?

ControllerBase

我們先看看ControllerBase的元數據:

Controller怎么在ASP.NET Core項目中使用

很長并沒有截全。可以看到ControllerBase是個抽象類,并且實現了大量的虛方法。這些虛方法大都是對應了Http的狀態碼。
比如:

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設計的基類,所以當你要設計一個Restful(web api)接口的時候可以選擇繼承自ControllerBase,它已經可以滿足你的需求。

Controller

查看下Controller的元數據:

Controller怎么在ASP.NET Core項目中使用

Controller也是一個抽象類,繼承自ControllerBase,并且繼承了幾個接口。很明顯Controller比ControllerBase多的內容主要是一些跟MVC打交道的東西。
比如:Viewbag、Viewdata屬性,Json、View方法等:

public dynamic ViewBag { get; }
public ViewDataDictionary ViewData { get; set; }
public virtual JsonResult Json(object data);
public virtual ViewResult View();
...

所以如果你是需要實現一個MVC系統,想要使用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";
    }
  }

運行一下:

Controller怎么在ASP.NET Core項目中使用

雖然TestController類并沒有繼承自任何類,但是他確實可以在ASP.NET CORE框架內正常工作。ASP.NET CORE框架默認會查找后綴為“Controller”的類,并把它當做真正的Controller使用,在路由系統最終匹配Controller的時候它也會被嘗試匹配。

使用ControllerAttribute

如果你的控制器類有什么特別需求,連類名都不想加入“Controller”的后綴,那么還有一種方法就是使用ControllerAttribute。

  [Controller]
  [Route("api/[controller]")]
  public class POCO 
  {
    [HttpGet]
    public string Get()
    {
      return "POCOController";
    }
  }

運行一下:

Controller怎么在ASP.NET Core項目中使用

POCO類并沒有繼承自任何類,并且也沒有“Controller”后綴命名,但是因為它被標記了ControllerAttribute同樣會被ASP.NET CORE框架認為是一個Controller。在路由系統最終匹配Controller的時候它也會被嘗試匹配。

使用NonControllerAttribute

如果你的一個類名恰巧包含“Controller”的后綴,但你并不想ASP.NET CORE框架發現它,你可以在類上加上NonControllerAttribute。這樣ASP.NET CORE框架就會忽略它。
改一下剛才的TestController,加上[NonController]:

  [NonController]
  [Route("api/[controller]")]
  public class TestController 
  {
    [HttpGet]
    public string Get()
    {
      return "TestController";
    }
  }

運行一下:

Controller怎么在ASP.NET Core項目中使用

/api/test已經匹配不到controller了。

總結

  • 設計restful(web api)接口的時候可以繼承ControllerBase

  • 設計MVC系統的時候可以繼承Controller

  • 當一個POCO類名稱包含"Controller"后綴或添加ControllerAttribute的時候框架會認為這是一個控制器

  • 當一個類不想被框架當做控制器的時候可以添加NonControllerAttribute

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沁源县| 高青县| 琼海市| 安岳县| 桦甸市| 普陀区| 莆田市| 蒙城县| 泗洪县| 行唐县| 浦县| 从化市| 上杭县| 东乡| 翁源县| 新河县| 龙陵县| 科技| 重庆市| 漳州市| 德江县| 南和县| 宁阳县| 南充市| 澜沧| 唐海县| 陈巴尔虎旗| 祁阳县| 曲靖市| 定结县| 凤庆县| 从化市| 临安市| 徐汇区| 延边| 海南省| 茂名市| 绍兴市| 华坪县| 龙海市| 聂拉木县|