Computer >> 컴퓨터 >  >> 프로그램 작성 >> C#

C# ASP.NETWebAPI에서 FromBody와 FromUri 특성의 차이점은 무엇입니까?

<시간/>

ASP.NET Web API는 컨트롤러에서 메서드를 호출할 때 매개변수에 대한 값을 설정해야 하며 이를 매개변수 바인딩이라고 합니다.

일반적으로 포맷터로 기본 설정되는 모델(작업 매개변수)을 바인딩하려면 URI에서 [FromUri] 속성으로 이를 장식해야 합니다. FromUriAttribute는 단순히 ModelBinderAttribute에서 상속되어 IUriValueProviderFactory에 정의된 ValueProviders를 사용하여 URI에서 특정 매개변수를 가져오도록 Web API에 지시하는 바로 가기 지시문을 제공합니다. 속성 자체는 봉인되어 더 이상 확장할 수 없지만 원하는 만큼 사용자 정의 IUriValueProviderFactories를 추가합니다.

ParameterBindingAttribute 클래스를 상속하는 [FromBody] 속성은 HTTP 요청 본문에서 매개변수와 해당 속성을 채우는 데 사용됩니다. ASP.NET 런타임은 본문을 읽는 책임을 입력 포맷터에 위임합니다. [FromBody]가 복합 유형 매개변수에 적용되면 해당 속성에 적용된 모든 바인딩 소스 속성이 무시됩니다.

FromUri 속성의 예 -

using System.Collections.Generic;
using System.Web.Http;
namespace DemoWebApplication.Controllers{
   public class DemoController : ApiController{
      public IEnumerable<string> Get([FromUri] string id, [FromUri] string name){
         return new string[]{
            $"The Id of the Student is {id}",
            $"The Name of the Student is {name}"
         };
      }
   }
}

위의 예에서 URI의 id와 name 값을 전달하여 Get 메서드의 해당 변수에 채우도록 합시다.

https://localhost:58174/api/demo?id=1&name=마크

출력

위 코드의 출력은

C# ASP.NETWebAPI에서 FromBody와 FromUri 특성의 차이점은 무엇입니까?

FromBody 속성의 예 -

아래 속성을 가진 학생 모델을 생성해 보겠습니다.

namespace DemoWebApplication.Models{
   public class Student{
      public int Id { get; set; }
      public string Name { get; set; }
   }
}

컨트롤러 코드 -

using DemoWebApplication.Models;
using System.Collections.Generic;
using System.Web.Http;
namespace DemoWebApplication.Controllers{
   public class DemoController : ApiController{
      public IEnumerable<string> Get([FromBody] Student student){
         return new string[]{
            $"The Id of the Student is {student.Id}",
            $"The Name of the Student is {student.Name}"
         };
      }
   }
}

위의 예에서 학생의 값은 요청 본문에 전달되고 학생 개체의 해당 속성에 매핑됩니다. 다음은 Postman을 사용한 요청 및 응답입니다.

C# ASP.NETWebAPI에서 FromBody와 FromUri 특성의 차이점은 무엇입니까?