如题。
客户端:
“提交”按钮采用form提交用户名密码。
成功则设置httpclient中head的“Authorization”。
失败则不设置。
1 @page "/" 2 @inject HttpClient http 3 4 用户名: 5 <input @bind=u />密码: 6 <input @bind=p /> 7 <br /> 8 结果: 9 @msg 10 <br /> 11 <button @onclick="Sub1">提交</button> 12 <button @onclick="Sub2">显示</button> 13 @code { 14 private string? u; 15 private string? p; 16 private string msg = string.Empty; 17 int c = 1; 18 19 private async void Sub1() 20 { 21 var formdata = new MultipartFormDataContent(); 22 formdata.Add(new StringContent(u??"1"), "x"); 23 formdata.Add(new StringContent(p??"1"), "y"); 24 var result=await http.PostAsync("/api/values/login", formdata); 25 var r = await result.Content.ReadAsStringAsync(); 26 if(result.StatusCode==System.Net.HttpStatusCode.OK) 27 { 28 http.DefaultRequestHeaders.Authorization = new(r); 29 } 30 msg = r; 31 StateHasChanged(); 32 } 33 private async void Sub2() 34 { 35 msg = await http.GetStringAsync($"/api/values/index1/{c}"); 36 c++; 37 StateHasChanged(); 38 } 39 }
点击“显示”按钮,根据认证字段是否正确,显示不同内容。
服务端:
1 using Microsoft.AspNetCore.Http; 2 using Microsoft.AspNetCore.Mvc; 3 4 namespace WebApplication1.Controllers 5 { 6 [Route("api/[controller]/[action]")] 7 [ApiController] 8 public class ValuesController : ControllerBase 9 { 10 public string Index() 11 { 12 return "Hello Katty."; 13 } 14 [HttpGet("{x}")] 15 public string Index1(string x) 16 { 17 if (Request.Headers.Authorization == "123") 18 return x + ",Hello Katty." + Request.Headers.Authorization.ToString(); 19 else 20 return "Authorization wrong!"; 21 } 22 [HttpPost] 23 //public IActionResult Login([FromForm] string x, [FromForm] string y) 24 public IActionResult Login([FromForm]MyUser m) 25 { 26 if (m.x == "1234" && m.y == "4567") 27 { 28 return Ok("123"); 29 } 30 else 31 { 32 return NotFound("wrong!"); 33 } 34 } 35 } 36 }
第23、24行都可以正常工作(当然,26行需要一点小的修改)。MyUser是一个含有x、y字符串属性的简单类。
第32行的失败返回是乱写的,不重要。
第17行对请求的头部进行验证。
运行效果:
点“提交”
点“显示”
正确认证:
再点“显示”