如题。
客户端:
“提交”按钮采用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
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/184127
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!