• 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行对请求的头部进行验证。

    运行效果:

    点“提交”

     点“显示”

     正确认证:

     再点“显示”

  • 相关阅读:
    flash中网页跳转总结
    as3自定义事件
    mouseChildren启示
    flash拖动条移出flash无法拖动
    需要一个策略文件,但在加载此媒体时未设置checkPolicyFile标志
    Teach Yourself SQL in 10 Minutes
    电子书本地转换软件 Calibre
    Teach Yourself SQL in 10 Minutes
    Teach Yourself SQL in 10 Minutes
    Teach Yourself SQL in 10 Minutes – Page 31 练习
  • 原文地址:https://www.cnblogs.com/wanjinliu/p/15777277.html
Copyright © 2020-2023  润新知