我是.net核心新手 而且我的情况是我必须将CPU使用率保持在最低限度 所以我对轻量级的网/休息可能性感兴趣 并启动了新的web api项目并调整了默认值ValuesControllers.cs
情况是我有很多日志文件,我已经可以通过uri列出日志了
的本地主机:someport / API /值/
我可以通过输入
来显示简单的txt日志文件内容
的本地主机:someport / API /值/ 5
这将显示fith日志文件内容
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using System.IO;
namespace Restview.Controllers
{
[Route("api/[controller]")]
public class ValuesController : Controller
{
const string LogFolder = @"C:\Logger\IOCount";
String[] result = Directory.GetFiles(LogFolder);
// GET api/values
[HttpGet]
public IEnumerable<string> Get()
{
for (int i=0; i<result.Length;i++) result[i]=Path.GetFileName(result[i]);
return result;
}
// GET api/values/5
[HttpGet("{id}")]
public string Get(int id)
{
string[] lines = System.IO.File.ReadAllLines(result[id]);
string answer = "Showing : " + result[id] + "\n" + string.Join('\n',lines);
return answer;
}
}
}
我想要的是 localhost:someport / api / values / 的结果可以点击,所以如果你点击某一行就可以看到该日志文件就像一样键入localhost:someport / api / values / clickedindex 。怎么实现呢?
答案 0 :(得分:0)
您必须将Get()方法更改为以下内容:
// GET api/values
public HttpResponseMessage Get()
{
var sb = new StringBuilder();
sb.Append("<html><body>");
for (int i = 0; i < result.Length; i++)
{
sb.Append($"<div><a href='{Url.Link("DefaultApi", new { Action = "", id = i })}'>{Path.GetFileName(result[i])}</div>");
}
sb.Append("</body></html>");
var res = Request.CreateResponse(HttpStatusCode.OK);
res.Content = new StringContent(sb.ToString(), Encoding.UTF8, "text/html");
return res;
}
正如您所看到的,如果您想要列表,则必须使用html作为输出内容类型。