zoukankan      html  css  js  c++  java
  • 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行对请求的头部进行验证。

    运行效果:

    点“提交”

     点“显示”

     正确认证:

     再点“显示”

  • 相关阅读:
    SIP头域说明
    android.os.NetworkOnMainThreadException异常
    "Only the original thread that created a view hierarchy can touch its views"引发的思考_Handler的使用
    sip命令与音视频rtp通话完整流程分析
    在Windows下搭建Android开发环境(摘自百度经验)
    jquery dialog 打开的时候自动聚焦解决方法
    对于数组(字符串)slice方法的总结
    SWIFT语言中的泛型编程 【GENERIC】【PART 2】
    手动调用playground的XCPCaptureValue展示Swift过程数据
    Swift语言相关资源贴
  • 原文地址:https://www.cnblogs.com/wanjinliu/p/15777277.html
Copyright © 2011-2022 走看看