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

如题。

客户端:

“提交”按钮采用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行对请求的头部进行验证。

运行效果:

点“提交”

 点“显示”

 正确认证:

 再点“显示”

原文地址:https://www.cnblogs.com/wanjinliu/p/15777277.html