欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ASP.NET Core MVC獲取請(qǐng)求的參數(shù)方法示例

 更新時(shí)間:2020年05月06日 10:55:22   作者:Agile.Zhou  
這篇文章主要給大家介紹了關(guān)于ASP.NET Core MVC是如何獲取請(qǐng)求的參數(shù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用ASP.NET Core MVC具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

一次HTTP請(qǐng)求,就是一次標(biāo)準(zhǔn)IO操作。請(qǐng)求是I,是輸入;響應(yīng)式O,是輸出。任何web開發(fā)框架,其實(shí)都是在干這兩件事:

  • 接受請(qǐng)求并進(jìn)行解析獲取參數(shù)
  • 根據(jù)參數(shù)進(jìn)行渲染并輸出響應(yīng)內(nèi)容

所以我們學(xué)習(xí)一個(gè)框架,我認(rèn)為最首要的是知道如何從請(qǐng)求中獲取參數(shù)。http請(qǐng)求攜帶參數(shù)的地方主要有下面幾個(gè)地方:

  • URL
  • Header
  • Body

下面看看ASP.NET Core是如何從這幾個(gè)位置獲取參數(shù)的。

通過URL獲取參數(shù)

通過URL傳參是HTTP最最常用的辦法。這里簡(jiǎn)單介紹下URL相關(guān)的知識(shí)。一個(gè)URL主要分成4個(gè)部分,以http://localhost:5000/fromurl/test?name=mjzhou&age=10為例:

http:// 協(xié)議
localhost:5000 主機(jī)地址
/fromurl/test PATH
name=mjzhou&age=10 QueryString

我們通常使用PATH跟QueryString來傳遞參數(shù)。新建一個(gè)MVC項(xiàng)目,新建一個(gè)Controller名為FromUrlController,通過幾個(gè)Action來演示如何從URL上獲取參數(shù)。

通過QuerySting獲取參數(shù)

Request.Query對(duì)象

  // /fromurl/test?name=mjzhou
  public IActionResult Test()
  {
   var name = Request.Query["name"];
   return Content(name);
  }

Request.Query對(duì)象包含了本次請(qǐng)求的QueryString的鍵值對(duì)列表,所以可以通過它輕松獲取QueryString上攜帶的參數(shù)。

自動(dòng)參數(shù)綁定

  // /fromurl/test?name=mjzhou
  public IActionResult Test1(string name)
  {
   return Content(name);
  }

如果Action的型參的名稱跟QueryString的Key一致,則MVC框架會(huì)自動(dòng)幫我們綁定參數(shù)的值,不用手動(dòng)獲取。

  public IActionResult Test2([FromQuery(Name = "id")]string bh)
  {
   return Content(bh);
  }

如果參數(shù)綁定的名稱跟QueryString的Key不一致,可以使用FromQueryAttribute強(qiáng)制指定綁定的Key的名稱。

通過PATH獲取參數(shù)

Request.Path對(duì)象

//  /fromurl/test3
  public IActionResult Test3()
  {
   var path = Request.Path;
   return Content(path);
  }

Request.Path對(duì)象包含了本次http請(qǐng)求的Path的原始信息,一般可以通過/來分隔,手工獲取想要的參數(shù)。

自動(dòng)參數(shù)綁定

//  /fromurl/Test4/mjzhou/1000
  [Route("FromUrl/test4/{name}/{id}")]
  public IActionResult Test4(string name, int id)
  {
   return Content($"{name}/{id}");
  }

Path的自動(dòng)參數(shù)綁定,需要配合RouteAttribute實(shí)現(xiàn),RouteAttribute主要是指定一個(gè)Path的模板,通過這個(gè)模板可以告訴路由是否匹配這個(gè)Action,另外一個(gè)就是可以告訴參數(shù)綁定,如何解析這個(gè)path實(shí)現(xiàn)參數(shù)綁定。

  [Route("FromUrl/test6/{name}/{id}")]
  public IActionResult Test6([FromRoute(Name ="name")]string xm, [FromRoute(Name = "id")]int bh)
  {
   return Content($"{xm}/{bh}");
  }

如果Action的型參名稱跟RouteAttribute模板的中的名稱不一樣,那么可以使用FromRoute強(qiáng)制指定解析的名稱。

  [HttpGet("FromUrl/test5/{name}/{id}")]
  public IActionResult Test5(string name, int id)
  {
   return Content($"{name}/{id}");
  }

HttpGetAttribute、HttpPostAttribute等attribute同樣可以完成RouteAttribute的效果,而且還指定了action接受的HTTP Method的方法,可以說是加強(qiáng)版的RouteAttribute。

從Header上獲取參數(shù)

添加一個(gè)FromHeaderController,通過幾個(gè)action來演示如果從http headers上獲取參數(shù)。

Request.Headers對(duì)象

  // /FromHeader/test
  public IActionResult Test()
  {
   var myName = Request.Headers["myName"];

   return Content(myName);
  }

Request.Headers是一個(gè)字典,包含了本次請(qǐng)求的Headers。所以我們可以通過Request.Headers對(duì)象輕松獲取某個(gè)header的值。

自動(dòng)參數(shù)綁定

  public IActionResult Test1([FromHeader]string myName)
  {
   return Content(myName);
  }

通過在action的型參上打上FromHeaderAttribute,可以告訴框架自動(dòng)從header獲取參數(shù)。

  public IActionResult Test2([FromHeader(Name = "myName")]string name)
  {
   return Content(name);
  }

如果action的型參跟header的key值不一致,可以通過FromHeaderAttribute強(qiáng)制指定匹配的header的key值。

從Body獲取參數(shù)

我們開發(fā)的時(shí)候經(jīng)常通過表單提交數(shù)據(jù),或者通過AJAX往后臺(tái)提交一個(gè)JavaScript對(duì)象,本質(zhì)上這些數(shù)據(jù)都是通過HTTP的Bady提交回去的。新建一個(gè)FromBodyController控制器,通過幾個(gè)Action來演示如何獲取Body的參數(shù)。

Request.Body對(duì)象

  public class model1
  {
   public string NAME { get; set; }
  }

  public async Task<IActionResult> Test()
  {
   Request.EnableBuffering();

   string body = "";
   var stream = Request.Body;
   if (stream != null)
   {
    stream.Seek(0, SeekOrigin.Begin);
    using (var reader = new StreamReader(stream, Encoding.UTF8, true, 1024, true))
    {
     body = await reader.ReadToEndAsync();
    }
    stream.Seek(0, SeekOrigin.Begin);
   }

   var model = JsonConvert.DeserializeObject<model1>(body);

   return Content(model.NAME);
  }

Request.Body是一個(gè)Stream,保存了本次請(qǐng)求的body數(shù)據(jù)。所以我們只要把這個(gè)stream讀出來,就能獲取提交的數(shù)據(jù)。有了原始的數(shù)據(jù),就可以通過反序列化等操作轉(zhuǎn)換為模型,更簡(jiǎn)單的獲取參數(shù)了。注意,ASP.NET Core想要讀取這個(gè)對(duì)象,必須先調(diào)用Request.EnableBuffering()這個(gè)方法。

使用postman測(cè)試一下:

參數(shù)自動(dòng)綁定

  public IActionResult Test1([FromBody]model1 model)
  {
   return Content(model.NAME);
  }

使用FromBodyAttribute可以把body的數(shù)據(jù)自動(dòng)反序列化成型參的模型。但是請(qǐng)注意使用[FromBody]請(qǐng)求的Content-Type必須是application-json。

使用postman測(cè)試下:


  public IActionResult Test2([FromForm]model1 model)
  {
   return Content(model.NAME);
  }

使用FromFormAttribute可以把body的數(shù)據(jù)自動(dòng)反序列化成型參的模型。但是請(qǐng)注意使用[FromForm]請(qǐng)求的Content-Type必須是application/x-www-form-urlencoded。

使用postman測(cè)試下:

總結(jié)

ASP.NET Core獲取請(qǐng)求參數(shù)主要從URL,Headers,Body等位置獲取。我們可以通過Request.Query、Request.Headers、Request.Body來手工獲取數(shù)據(jù)。也可以通過[FromQuery]、[FromHeader]、[Frombody]等Attribute來實(shí)現(xiàn)參數(shù)的自動(dòng)綁定。

好了,到此這篇關(guān)于ASP.NET Core MVC獲取請(qǐng)求的參數(shù)的文章就介紹到這了,更多相關(guān)ASP.NET Core MVC獲取請(qǐng)求參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • ASP.NET 修復(fù) IIS 映射具體實(shí)現(xiàn)步驟

    ASP.NET 修復(fù) IIS 映射具體實(shí)現(xiàn)步驟

    本文主要介紹IIS映射的具體步驟,希望對(duì)大家有所幫助。
    2016-05-05
  • 如何使用ASP.NET MiniAPI 調(diào)試未匹配請(qǐng)求路徑

    如何使用ASP.NET MiniAPI 調(diào)試未匹配請(qǐng)求路徑

    ASP.NET MiniAPI是一個(gè)輕量級(jí)的Web API框架,它可以讓我們快速地構(gòu)建和部署RESTful服務(wù),本文給大家介紹使用ASP.NET MiniAPI 調(diào)試未匹配請(qǐng)求路徑的方法,感興趣的朋友一起看看吧
    2024-01-01
  • 使用NLog給Asp.Net Core做請(qǐng)求監(jiān)控的方法

    使用NLog給Asp.Net Core做請(qǐng)求監(jiān)控的方法

    這篇文章主要介紹了使用NLog給Asp.Net Core做請(qǐng)求監(jiān)控的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • ASP.NET對(duì)HTML頁面元素進(jìn)行權(quán)限控制(三)

    ASP.NET對(duì)HTML頁面元素進(jìn)行權(quán)限控制(三)

    界面每個(gè)元素的權(quán)限也是需要控制的。比如一個(gè)查詢用戶的界面里面有查詢用戶按鈕,添加用戶按鈕,刪除用戶按鈕,不同的角色我們得分配不同的權(quán)限
    2013-12-12
  • c#實(shí)現(xiàn)根據(jù)網(wǎng)絡(luò)IP顯示地理位置功能示例

    c#實(shí)現(xiàn)根據(jù)網(wǎng)絡(luò)IP顯示地理位置功能示例

    通常都會(huì)有類似 注冊(cè)IP和最后登錄IP這兩個(gè)的字段來存儲(chǔ)用戶注冊(cè)時(shí)候的IP地址和最后登錄的IP的地址,現(xiàn)在我們就簡(jiǎn)單的實(shí)現(xiàn)一下如標(biāo)題所示的功能
    2013-06-06
  • Redis中pop出隊(duì)列多個(gè)元素思考

    Redis中pop出隊(duì)列多個(gè)元素思考

    本文主要介紹了Redis中pop出隊(duì)列多個(gè)元素思考,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • .net core中編輯json配置文件的方法

    .net core中編輯json配置文件的方法

    今天給大家分享.net core中編輯json配置文件的方法,在項(xiàng)目設(shè)計(jì)中,需要在運(yùn)行過程中,將遠(yuǎn)程服務(wù)端發(fā)送過來的配置信息回寫到配置文件中,具體內(nèi)容詳情跟隨小編一起看看吧
    2021-06-06
  • .Net Core WebApi部署到Windows服務(wù)器上的步驟

    .Net Core WebApi部署到Windows服務(wù)器上的步驟

    這篇文章主要介紹了.Net Core WebApi部署到Windows服務(wù)器上的步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • C#實(shí)現(xiàn)HTTP協(xié)議迷你服務(wù)器(兩種方法)

    C#實(shí)現(xiàn)HTTP協(xié)議迷你服務(wù)器(兩種方法)

    用C#語言實(shí)現(xiàn)HTTP協(xié)議的服務(wù)器類本文將以兩種稍微有差別的方式用C#語言實(shí)現(xiàn);要完成高性能的Web服務(wù)功能,通常都是需要寫入到服務(wù),如IIS,Apache Tomcat感興趣的朋友可以了解下,或許對(duì)你學(xué)習(xí)c#有所幫助
    2013-02-02
  • asp.net下使用DIME協(xié)議上傳文件

    asp.net下使用DIME協(xié)議上傳文件

    asp.net下使用DIME協(xié)議上傳文件...
    2007-04-04

最新評(píng)論