ASP.NET Core API模型綁定和Action數據返回格式

參考文檔:https://www.cnblogs.com/FlyLolo/p/ASPNETCore2_20.html

模型綁定

  • [FromQuery] - 從URL中取值。
  • [FromRoute] - 從路由中取值。
  • [FromForm] - 從表單中取值。Postman使用form-datax-www-form-urlencoded調用。Content-Type對應multipart/form-dataapplication/x-www-form-urlencoded
  • [FromBody] - 從HTTP Body取值,通常用於取實體類的JSON, XML。Postman使用raw調用。Content-Type對應application/json
  • [FromHeader] - 從請求頭中取值。
  • [FromServices]- 從DI容器取值,獲取服務。DI預設是使用Constructor Injection

multipart/form-data與x-www-form-urlencoded區別

  • multipart/form-data:既可以上傳文件等二進制數據,也可以上傳表單鍵值對,只是最後會轉化爲一條信息。
  • x-www-form-urlencoded:只能上傳鍵值對,並且鍵值對都是間隔分開的。

raw

  • 可以上傳任意格式的文本,可以上傳text、json、xml、html等

binary

  • 相當於Content-Type:application/octet-stream,從字面意思得知,只可以上傳二進制數據,通常用來上傳文件,由於沒有鍵值,所以,一次只能上傳一個文件。
using Microsoft.AspNetCore.Mvc;
using System;
using WebApplication1.Filter;

namespace WebApplication1.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        private readonly ILogger<WeatherForecastController> _logger;

        public WeatherForecastController(ILogger<WeatherForecastController> logger)
        {
            _logger = logger;
        }


        [HttpGet]
        public void Get()
        {

           
        }

        [HttpGet("FirstSample/{id}")]
        public IActionResult FirstSample(
      [FromHeader] string header,
      [FromForm] string form,
      [FromRoute] string id,
      [FromQuery] string query)
        {
            return Ok($"header: {header}, form: {form}, id: {id}, query: {query}");
        }

        public IActionResult DISample([FromServices] ILogger<WeatherForecastController> logger)
        {
            return Content($"logger is null: {logger == null}.");
        }

        public IActionResult BodySample([FromBody] Test model)
        {
            return Ok(model);
        }

        [WebApiAttribute]
        [HttpPost("Post")]
        public Test Post([FromBody] Test test)
        {
            return test;
        }

        [WebApiAttribute]
        [HttpPost("UploadFile")]
        public void PostList([FromForm] string person, [FromForm] IFormCollection formCollection)
        {
            var file = formCollection.Files.GetFile("filename");
            using var ms = new MemoryStream();
            file.CopyTo(ms);
            var fileBytes = ms.ToArray();
            //var fileStream = file.OpenReadStream();
            //using var bytes = new byte[file.Length];
            //fileStream.Read(bytes, 0, (int)file.Length);
            Console.WriteLine(person);
        }

    }

    public class Test { 
    
        public string Name { get; set; }
        public string Summary { get; set; }
    }
}

Action數據返回格式

using System.Threading.Tasks;
using System.Net.Http.Json;
using System.IO;
using System;
using Microsoft.AspNetCore.Mvc;

namespace WebApplication3.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class HomeController : Controller
    {

        public IActionResult Index() => Redirect("/swagger");

        [HttpGet("ObjStr")]
        public IActionResult Obj() => Ok(123546);

        //返回任意值
        public async Task<ActionResult> OkObj() => Ok(await Task.FromResult(1));

        //返回文本
        public ActionResult ContentResultDemo() => Content(Guid.NewGuid().ToString());

        //返回一個空對象
        public ActionResult EmptyResultDemo() => new EmptyResult();

        /// <summary>
        /// FileContentResult的用法(返回圖片)
        /// </summary>
        /// <returns>顯示一個文件內容</returns>
        public ActionResult FileContentResultDemo()
        {
            FileStream fs = new FileStream(Path.Combine(@"/Images/001.jpg"), FileMode.Open, FileAccess.Read);
            byte[] buffer = new byte[Convert.ToInt32(fs.Length)];
            fs.Read(buffer, 0, Convert.ToInt32(fs.Length));
            string contentType = "image/jpeg";
            return File(buffer, contentType);
        }

        //返回一個文件對象
        public ActionResult FilePathResult() => File(Path.Combine(@"/Images/123.jpg"), "image/jpeg");

        //HttpUnauthorizedResult 的用法(拋出401錯誤)
        public ActionResult HttpUnauthorizedResult() => Unauthorized();

        //HttpStatusCodeResult的方法(返回錯誤狀態信息)
        public ActionResult HttpStatusCodeResultDemo() => StatusCode(500, "System Error");

        // HttpNotFoundResult的使用方法
        public ActionResult HttpNotFoundResultDemo() => NotFound("not found action");

        //返回一個json對象
        public ActionResult JsonResultDemo() => Json(new { name = "json" });

        //RedirectResult的用法(跳轉url地址)
        public ActionResult RedirectResultDemo() => Redirect("https://www.baidu.com/");

        //RedirectToRouteResult的用法(跳轉的action名稱)
        public ActionResult RedirectToRouteResultDemo() => RedirectToAction(@"FileContentResultDemo");

        // ViewResult的用法(返回視圖)
        public ActionResult ViewResultDemo() => View();

        //PartialViewResult的用法(返回部分視圖)
        public PartialViewResult PartialViewResultDemo() => PartialView();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章