參考文檔:https://www.cnblogs.com/FlyLolo/p/ASPNETCore2_20.html
模型綁定
- [FromQuery] - 從URL中取值。
- [FromRoute] - 從路由中取值。
- [FromForm] - 從表單中取值。Postman使用
form-data
或x-www-form-urlencoded
調用。Content-Type
對應multipart/form-data
或application/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();
}
}