Trong bài này, mình sẽ chia sẻ cho các bạn cách mình quản lý file robots.txt trong ASP.NET Core, đọc file robots.txt cho web.
Trước tiên, mình xin giới thiệu về file robots.txt trong web. Robots.txt đơn giản là 1 file txt giúp cho những con bot của công cụ tìm kiếm như Google có thể dễ dàng index dữ liệu của website mình hơn và người quản trị có thể quản lý những phần cho bot index hoặc không index từ những syntax được khai báo trong file. Nó liên quan nhiều đến SEO nếu anh em nào có tìm hiểu.
Tiếp theo, mình sẽ tạo 1 file robots.txt ở ngoài thư mục source .NET Core Việt Nam của mình. Sau đó mình thêm 1 function để khai báo về file robots để có thể hiện thị trên URL như ví dụ domain.com/robots.txt.
[HttpGet("robots.txt")] public IActionResult Robots() { Response.ContentType = "text/plain"; var path = System.IO.Path.Combine(_appEnvironment.ContentRootPath, $"robots.txt"); var result = new StringBuilder(); string[] lines = System.IO.File.ReadAllLines(path); foreach (string line in lines) { result.Append(line); result.Append(Environment.NewLine); } ViewBag.Robots = result.ToString(); return View(); }
Sao đó mình tạo 1 Razor view như bên dưới, để đọc nội dung file robots ra ngoài view với không có layout kế thừa.
@{ Layout = null; } @Html.Raw(ViewBag.Robots)
Vậy là mình đã định nghĩa xong 1 page robots cần thiết.
Nhưng mình muốn quản lý luôn file robots đó trong phần Admin để cho tiện lợi hơn thông qua thư viện System.IO để đọc và ghi file. Mình sử dụng API để làm nhé.
#region Robots [HttpGet("robots")] public IActionResult ReadFileRobots() { var path = System.IO.Path.Combine(_appEnvironment.ContentRootPath, $"robots.txt"); var result = new StringBuilder(); string[] lines = IO.File.ReadAllLines(path); foreach (string line in lines) { result.Append(line); result.Append(Environment.NewLine); } _logger.LogInformation(nameof(ReadFileRobots), path); return Ok(result.ToString()); } [HttpPost("robots")] public IActionResult WriteFileRobots([FromBody] RobotsModel model) { var path = System.IO.Path.Combine(_appEnvironment.ContentRootPath, $"robots.txt"); var response = new ResponseResult(); if (model == null || string.IsNullOrEmpty(model.Text)) { ModelState.AddModelError("Text", $"File robots rỗng!"); var fails = FailValidations(ModelState, false, "Invalid!"); return BadRequest(JsonResult(fails)); } var file = IO.Path.Combine(path); if (!IO.File.Exists(file)) { ModelState.AddModelError("Text", $"{file} không tìm thấy!"); var fails = FailValidations(ModelState, false, "Invalid!"); return BadRequest(fails); } IO.File.WriteAllText(file, model.Text); response.Status = true; response.Message = "Write File Robots Successfully!"; _logger.LogInformation(nameof(WriteFileRobots), path); return Ok(response); } #endregion
Sau đó mình trả lên UI trong Admin Page sử dụng Html và Vue JS.
Anh em xem tiếp về ASP.NET Core nâng cao nhé nếu thấy hay.