有沒有想過如果我們自己要設計一門編程語言,要做到什麼樣的標準才能符合在.Net平臺下運行的條件呢?.Net在官方描述過一段話,大體的意思變成白話是:只要你的語言在編譯後能夠轉換成CIL代碼,那麼你的語言就可以在.Net平臺下進行開發和運行。 CIL語言之所以能夠在.Net平臺下運行,實際上它是符合了 ...
組件解決的問題
由於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組件是比較簡單的jquery
的Ajax
方法的封裝,封裝的內容比較少,只支持Json作為參數,返回值也會轉換成Json,所以僅建議用於登錄等內部前後端交流,並且需要帶cookie或者必須由瀏覽器發起的特殊邏輯中。
複雜的訪問,建議使用c#的HttpClient類,不建議使用此組件進行處理。