【问题标题】:Lightweight rest how to do clickable results?轻量级的rest怎么做可点击的结果?
【发布时间】:2018-05-25 23:32:18
【问题描述】:

我是 .net 核心的新手。
而且我处于必须将 CPU 使用率保持在最低限度的情况。
所以我对轻量级网络/休息的可能性产生了兴趣。
并启动了新的 web api 项目并调整了默认值Controllers.cs

情况是我有很多日志文件,我已经可以通过 uri 列出日志
localhost:someport/api/values/
我可以通过键入
localhost:someport/api/values/5
来显示一个简单的 txt 日志文件内容 这将显示第五个日志文件内容

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 被输入。如何做到这一点?

【问题讨论】:

    标签: rest .net-core asp.net-core-webapi


    【解决方案1】:

    你必须把你的 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 作为输出内容类型。

    【讨论】:

    • hmm 也可以通过设置某种括号选项 ea [HttpGet] [JsonGet] 来作为可选的 HTML 输出和 JSON 原始数据输出??
    • 它被称为“内容协商”,你可以阅读它here,你也可能只需要使用一些查询参数,比如“?xml”来输出xml,html输出会用作默认值,反之亦然。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    相关资源
    最近更新 更多