亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

ASP.NET中Web API的參數(shù)綁定

 更新時(shí)間:2022年03月08日 10:10:58   作者:.NET開(kāi)發(fā)菜鳥(niǎo)  
本文詳細(xì)講解了ASP.NET中Web API的參數(shù)綁定,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

在這篇文章中,我們將學(xué)習(xí)WebAPI如何將HTTP請(qǐng)求數(shù)據(jù)綁定到一個(gè)操作方法的參數(shù)中。

操作方法在WebAPI控制器中可以有一個(gè)或多個(gè)不同類型的參數(shù)。它可以是基本數(shù)據(jù)類型或復(fù)雜類型。WebAPI根據(jù)URL的查詢字符串或請(qǐng)求主體中參數(shù)類型來(lái)綁定操作方法的參數(shù)。

如果參數(shù)類型是基本數(shù)據(jù)類型(int,double,string,DateTime,bool等),WebAPI默認(rèn)將會(huì)從URL中獲取參數(shù)值(即通過(guò)querystring)獲取。

如果參數(shù)類型的復(fù)雜類型,WebAPI默認(rèn)從請(qǐng)求主體中獲取參數(shù)值。

下表列出了Web API參數(shù)綁定的默認(rèn)規(guī)則。

HTTP方法Query StringRequest Body
GET簡(jiǎn)單類型不能從請(qǐng)求主體中獲取參數(shù)值
POST簡(jiǎn)單類型復(fù)雜類型
PUT簡(jiǎn)單類型復(fù)雜類型
PATCH簡(jiǎn)單類型復(fù)雜類型
DELETE簡(jiǎn)單類型不能從請(qǐng)求主體中獲取參數(shù)值

我們先來(lái)看看創(chuàng)建帶MVC的Web API項(xiàng)目時(shí)自動(dòng)生成的Values控制器是如何定義的。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace WebAPIContainMVC.Controllers
{
    public class ValuesController : ApiController
    {
        // GET api/values
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/values/5
        public string Get(int id)
        {
            return "value";
        }

        // POST api/values
        public void Post([FromBody]string value)
        {
        }

        // PUT api/values/5
        public void Put(int id, [FromBody]string value)
        {
        }

        // DELETE api/values/5
        public void Delete(int id)
        {
        }
    }
}

從Values控制器的定義中,我們可以得出如下幾個(gè)結(jié)論:

(1)WebAPI常規(guī)的方法有四個(gè):Get(),Post(),Put()和Delete()。

(2)四種方法的參數(shù)可以歸納為兩大類:URL傳遞(Request-url)和Body(Request-body)傳遞。

(3)可以將四種方法的參數(shù)傳遞歸為兩大類,而這兩大類又集中在Get和Post中體現(xiàn)(Put是Get和Post的組合,Delete和Get類型),所以說(shuō)研究WebAPI的參數(shù)綁定,只需要研究Get和Post方法的參數(shù)傳遞即可,Get對(duì)應(yīng)Request-url,Post對(duì)應(yīng)Request-Body。

在本篇文章中,客戶端調(diào)用使用Fiddler工具進(jìn)行測(cè)試。

一、Get

1、基本數(shù)據(jù)類型作為方法參數(shù)

1.1方法只含有一個(gè)參數(shù)(形參可以傳遞進(jìn)來(lái))

方法定義如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using WebAPIContainMVC.Entity;

namespace WebAPIContainMVC.Controllers
{
    public class StudentController : ApiController
    {
        [HttpGet]
        public string GetStudentById(int id)
        {
            string strResult=string.Empty;
            List<Student> list = new List<Student>();
            Student stu = new Student()
            {
              StudentId=1,
              Name="Tom",
              Age=20,
              Sex="男"
            };
            list.Add(stu);
            list.ForEach(p =>
            {
                if (p.StudentId.Equals(id))
                {
                    strResult = "存在該學(xué)生信息";
                }
                else
                {
                    strResult = "對(duì)不起,找不到該學(xué)生信息";
                }
            });

        return strResult;
        }
    }
}

客戶端調(diào)用

結(jié)果:

雙擊左側(cè)的進(jìn)程,得到如下的結(jié)果

1.2、方法含有多個(gè)參數(shù)(形參可以傳遞進(jìn)來(lái))

方法定義如下:

public string GetStudentByIdAndName(int id,string name)
{
            string strResult = string.Empty;
            List<Student> list = new List<Student>();
            Student stu = new Student()
            {
                StudentId = 1,
                Name = "Tom",
                Age = 20,
                Sex = "男"
            };
            list.Add(stu);
            list.ForEach(p =>
            {
                if (p.StudentId.Equals(id)&&p.Name.Equals(name))
                {
                    strResult = "存在該學(xué)生信息";
                }
                else
                {
                    strResult = "對(duì)不起,找不到該學(xué)生信息";
                }
            });
 
            return strResult;
}

URL地址:http://localhost:63512/api/student?id=1&&name=Tom

結(jié)果如下:

2、實(shí)體對(duì)象類型作為方法參數(shù)(形參不能傳遞進(jìn)來(lái))

方法定義如下:

[HttpGet]
public string GetStudent(Student student)
{
            string strResult = string.Empty;
            List<Student> list = new List<Student>();
            Student stu = new Student()
            {
                StudentId = 1,
                Name = "Tom",
                Age = 20,
                Sex = "男"
            };
            list.Add(stu);
            if (student != null)
            {
                list.ForEach(p =>
                {
                    if (p.StudentId.Equals(student.StudentId))
                    {
                        strResult = "存在該學(xué)生信息";
                    }
                    else
                    {
                        strResult = "對(duì)不起,找不到該學(xué)生信息";
                    }
                });
            }
            else
            {
                strResult = "參數(shù)值為Null";
            }
      
 
            return strResult;
}

客戶端調(diào)用結(jié)果如下:

3、基本數(shù)據(jù)類型和實(shí)體對(duì)象混合作為方法參數(shù)(基本數(shù)據(jù)類型可以傳遞進(jìn)來(lái),實(shí)體對(duì)象不能傳遞進(jìn)來(lái))

4、總結(jié)

(1)查詢字符串參數(shù)名稱和操作方法參數(shù)名稱必須相同(不區(qū)分大小寫)。參數(shù)的先后順序可以不一致。

(2)Get()參數(shù)傳遞的本質(zhì)是URL字符串拼接,但是URL字符串的長(zhǎng)度受限制。

(3)Get()的參數(shù)支持基本數(shù)據(jù)類型,不支持實(shí)體數(shù)據(jù)類型。

(4)Get()參數(shù)的傳遞是在Http請(qǐng)求的頭部傳遞,而不支持Request-Body傳遞。

(5)Get類型的方法命名,盡量采用“Get+方法名”的命名方式,在方法前面加上特性:[HttpGet]。

二、Post

1、Post參數(shù)傳遞是在Request-Body內(nèi)傳遞。

2、Post參數(shù)可以傳遞基本數(shù)據(jù)類型,也可以傳遞實(shí)體數(shù)據(jù)類型。

3、Post操作方法只能包含一個(gè)實(shí)體數(shù)據(jù)類型,因?yàn)橹荒茉试S一個(gè)參數(shù)讀取Request-Body中的數(shù)據(jù)。

4、Post傳遞參數(shù)時(shí),無(wú)論是基本類型參數(shù)還是實(shí)體類型,均需要借助[FromBody]特性。(有些情況下不寫[FromBody]特性也可以把參數(shù)傳遞進(jìn)來(lái),但為了規(guī)范化,最好是加上該特性)。

5、Post類型的方法命名,盡量采用“Post+方法名”的命名方式,在方法前面加上特性:[HttpPost]。

三、FromURI與FromBody

在默認(rèn)情況下,WebAPI是從查詢字符串中得到基本數(shù)據(jù)類型參數(shù)的值,從請(qǐng)求主體中得到復(fù)雜類型參數(shù)的值,如果想改變這種默認(rèn)情況怎么辦?

可以使用[FromURI]屬性,是WebAPI從查詢字符串中獲取復(fù)雜類型參數(shù)的值,使用[FromBody]屬性可以使WebAPI從請(qǐng)求主體中獲取基本數(shù)據(jù)類型參數(shù)的值。

例如下面的Get方法

[HttpGet]
public string GetStudentById([FromUri]Student stu)
{
         
}

Get方法中包括復(fù)雜的類型參數(shù),參數(shù)添加了[FromUri]屬性,WebAPI將試圖從查詢字符串中得到Student類型參數(shù)的值。

同樣,參考下面的Post方法:

[HttpPost]
public string Post([FromBody]string name)
{ }

WebAPI將從請(qǐng)求主體中獲取基本類型參數(shù)的值,而不是從請(qǐng)求字符串中獲取。

到此這篇關(guān)于ASP.NET中Web API參數(shù)綁定的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • .net 添加Cookie的4種方法

    .net 添加Cookie的4種方法

    這篇文章主要介紹了.net 添加Cookie的4種方法,有需要的朋友可以參考一下
    2014-01-01
  • ASP.NET MVC中Controller控制器向View視圖傳值的幾種方式

    ASP.NET MVC中Controller控制器向View視圖傳值的幾種方式

    這篇文章介紹了ASP.NET MVC中Controller控制器向View視圖傳值的幾種方式,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • asp.net 上傳大文件解決方案

    asp.net 上傳大文件解決方案

    asp.net 上傳大文件解決方案...
    2007-04-04
  • VS2013安裝提示必須安裝ie10的解決辦法

    VS2013安裝提示必須安裝ie10的解決辦法

    這篇文章主要為大家詳細(xì)介紹了VS2013安裝提示必須安裝ie10的解決辦法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • .net?程序通過(guò)?crontab?無(wú)法啟動(dòng)手動(dòng)執(zhí)行腳本啟動(dòng)的方法

    .net?程序通過(guò)?crontab?無(wú)法啟動(dòng)手動(dòng)執(zhí)行腳本啟動(dòng)的方法

    .net 網(wǎng)關(guān)程序需要設(shè)置定時(shí)重啟,按照日常操作先把正在運(yùn)行的 PID kill 掉后,再執(zhí)行啟動(dòng)服務(wù)。通過(guò)腳本無(wú)法啟動(dòng),試著把 .net 程序?qū)懗煞?wù)后,發(fā)現(xiàn)是可以正常重啟的,本文給大家介紹下.net 程序通過(guò) crontab 無(wú)法啟動(dòng)手動(dòng)執(zhí)行腳本啟動(dòng),感興趣的朋友一起看看吧
    2021-12-12
  • asp.net DataSet進(jìn)行排序

    asp.net DataSet進(jìn)行排序

    關(guān)于對(duì)已經(jīng)綁定的DataSet的排序的問(wèn)題。
    2009-07-07
  • asp.net SqlHelper數(shù)據(jù)訪問(wèn)層的使用

    asp.net SqlHelper數(shù)據(jù)訪問(wèn)層的使用

    如果不使用數(shù)據(jù)訪問(wèn)層,那么你的代碼里會(huì)出現(xiàn)很多SqlConnection、SqlCommand、SqlDataReader、Open、 Close……這些類和方法,而且代碼量很大,讓你不勝其煩,而且代碼寫起來(lái),其實(shí)都是體力活,沒(méi)有技術(shù)含量。
    2008-09-09
  • ASP.NET?MVC實(shí)現(xiàn)登錄后跳轉(zhuǎn)到原界面

    ASP.NET?MVC實(shí)現(xiàn)登錄后跳轉(zhuǎn)到原界面

    這篇文章介紹了ASP.NET?MVC實(shí)現(xiàn)登錄后跳轉(zhuǎn)到原界面的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • asp.net 2.0多語(yǔ)言網(wǎng)站解決方法

    asp.net 2.0多語(yǔ)言網(wǎng)站解決方法

    asp.net 2.0中的App_GlobalResources可以用來(lái)解決本地化的問(wèn)題,程序會(huì)根據(jù)瀏覽器的語(yǔ)言首選項(xiàng)自動(dòng)判斷顯示出本地化的界面。
    2008-09-09
  • 對(duì)WPF中Expander控件美化

    對(duì)WPF中Expander控件美化

    這篇文章介紹了對(duì)WPF中Expander控件美化的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01

最新評(píng)論