组件解决的问题

由于Blazor在与服务器连接时使用了Websocket,仅在第一次连接时会走原MVC的连接逻辑。所以,我们无法在这个过程中完成例如身份认证、cookie处理等操作。

此组件即为解决此类问题准备的。

组件用法

官网文档可以直接查阅

这里给出一部分代码:

  • 在页面上添加<Ajax></Ajax>的组件引用

  • @inject AjaxService AjaxService注入AjaxService

var option = new AjaxOption
{
Url = "/api/Login",
Data = new User() { UserName = "admin", Password = "123456" }
};

定义一个AjaxOption,其中Url即为要访问的WebApi地址,Data为RequestData。默认method为POST,也可以自己定义。

  • var result = await AjaxService.GetMessage(ajaxOption);使用AjaxService.GetMessage来调用Ajax方法访问指定Url并获取返回。

在官网例子中,WebApi的定义如下:

[Route("api/[controller]")]
[AllowAnonymous]
[ApiController]
public class LoginController : ControllerBase
{
/// <summary>
///
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
[HttpPost]
public IActionResult Post(User user)
{
IActionResult? response;
if (user.UserName == "admin" && user.Password == "123456")
{
response = new JsonResult(new { Code = 200, Message = "登录成功" });
}
else
{
response = new JsonResult(new { Code = 500, Message = "用户名或密码错误" });
}
return response;
}
}

这里校验如果用户名为admin并且密码为123456时返回登录成功,否则返回用户名或密码错误。

然后我们就可以判断返回的result来判断是否登录成功。

if (result == null)
{
ResultMessage = "响应失败";
}
else
{
ResultMessage = result;
var doc = JsonDocument.Parse(result);
if (200 == doc.RootElement.GetProperty("code").GetInt32())
{
await SwalService.Show(new SwalOption() { Content = "登录成功!", Category = SwalCategory.Success });
}
else
{
await SwalService.Show(new SwalOption() { Content = $"登录失败:{doc.RootElement.GetProperty("message").GetString()}", Category = SwalCategory.Error });
}
}

建议使用位置

Ajax组件是比较简单的jqueryAjax方法的封装,封装的内容比较少,只支持Json作为参数,返回值也会转换成Json,所以仅建议用于登录等内部前后端交流,并且需要带cookie或者必须由浏览器发起的特殊逻辑中。

复杂的访问,建议使用c#的HttpClient类,不建议使用此组件进行处理。

最新文章

  1. HDU 4946 Area of Mushroom(构造凸包)
  2. 【转】如何建立一个样式新颖的CSS3搜索框
  3. javascript - DOM对象控制HTML元素详解
  4. windows递归拷贝(或删除等操作)文件
  5. [Spring MVC] - Spring MVC环境搭建
  6. Oracle 动态视图3 V$SESSION
  7. java多线程总结三:sleep()、join()、interrupt()示例
  8. IOS使用C#预处理命令,多种SDK共存
  9. 洛谷 P1471 方差
  10. TreeSet集合解析
  11. Visual Studio 2017中使用Libman管理客户端库
  12. Myeclipse在debug模式下没加断点程序卡住,start模式下可以正常启动
  13. 3ds max学习笔记(十一)-- 修改器
  14. ubuntun 18.04 安装google浏览器
  15. Git实战手册(二): 标签应用和版本管理
  16. HDU - 5117 Fluorescent(状压dp+思维)
  17. switchable图片切换
  18. Linux服务器---mysql忘记root密码
  19. 取出当前会话的sid、process_id.sql
  20. Python股票信息抓取~

热门文章

  1. 当前分支拉取master的操作 git rebase master
  2. 通过blacklist来禁用驱动
  3. jdr挖的大坑
  4. 常见的反爬措施:UA反爬和Cookie反爬
  5. 保姆教程系列一、Linux搭建Nacos
  6. Spring Boot 传参 序列化和反序列化
  7. 说说三元运算和if...else的相同之处
  8. 串联型PID,并联型PID与标准型PID简要说明
  9. 移动端——touch事件
  10. Html5 Canvas学习之路(五)