Computer >> Máy Tính >  >> Lập trình >> C#

Sự khác biệt giữa các thuộc tính FromBody và FromUri trong C # ASP.NETWebAPI là gì?

Khi ASP.NET Web API gọi một phương thức trên bộ điều khiển, nó phải đặt giá trị cho các tham số, một quá trình được gọi là liên kết tham số.

Để liên kết một mô hình (một tham số hành động), thông thường sẽ được mặc định là một định dạng, từ URI, chúng ta cần trang trí nó bằng thuộc tính [FromUri]. FromUriAttribute chỉ đơn giản là kế thừa từ ModelBinderAttribute, cung cấp cho chúng ta một lệnh tắt để hướng dẫn Web API lấy các tham số cụ thể từ URI bằng cách sử dụng ValueProviders được xác định trong IUriValueProviderFactory. Bản thân thuộc tính này đã được niêm phong và không thể mở rộng thêm nữa, nhưng bạn thêm bao nhiêu IUriValueProviderFactories tùy chỉnh tùy thích.

Thuộc tính [FromBody] kế thừa lớp ParameterBindingAttribute được sử dụng để điền một tham số và các thuộc tính của nó từ phần thân của một yêu cầu HTTP. Thời gian chạy ASP.NET ủy quyền trách nhiệm đọc phần nội dung cho một trình định dạng đầu vào. Khi [FromBody] được áp dụng cho một tham số kiểu phức tạp, bất kỳ thuộc tính nguồn liên kết nào được áp dụng cho các thuộc tính của nó đều bị bỏ qua.

Ví dụ cho Thuộc tính FromUri -

Ví dụ

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}"
         };
      }
   }
}

Đối với ví dụ trên, chúng ta hãy chuyển giá trị của id và tên trong URI để điền vào biến tương ứng của chúng trong phương thức Get.

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

Đầu ra

Đầu ra của đoạn mã trên là

Sự khác biệt giữa các thuộc tính FromBody và FromUri trong C # ASP.NETWebAPI là gì?

Ví dụ cho thuộc tính FromBody -

Ví dụ

Hãy để chúng tôi tạo mô hình Sinh viên có các thuộc tính dưới đây.

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

Mã bộ điều khiển -

Ví dụ

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}"
         };
      }
   }
}

Đối với ví dụ trên, giá trị cho sinh viên được truyền vào phần thân yêu cầu và nó được ánh xạ tới thuộc tính tương ứng của đối tượng Sinh viên. Dưới đây là yêu cầu và phản hồi bằng Postman.

Sự khác biệt giữa các thuộc tính FromBody và FromUri trong C # ASP.NETWebAPI là gì?