Blazor访问WebApi认证--提交与返回常量令牌


如题。

客户端:

“提交”按钮采用form提交用户名密码。

成功则设置httpclient中head的“Authorization”。

失败则不设置。

 1 @page "/"
 2 @inject HttpClient http
 3 
 4 用户名:
 5 密码:
 6 
 7 
8 结果: 9 @msg 10
11 12 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行对请求的头部进行验证。

运行效果:

点“提交”

 点“显示”

 正确认证:

 再点“显示”