【问题标题】:.Net Core using web api in web app.Net Core 在 Web 应用程序中使用 Web api
【发布时间】:2017-04-19 14:57:11
【问题描述】:

这是我在 stackoverflow 上的第一个问题,希望这不是因为我的搜索能力差。

我最近正在尝试使用 .net 核心创建日志服务器。 我开始了一个 web api 项目并创建了这样的东西:

    [HttpPost("/log")]
    public IActionResult Post([FromQuery] string msg, [FromQuery] string stackTrace)
    {
       ...
    }

我将每个日志存储为一个对象,我可以使用 console.log 来显示它的值。然后我尝试使用 websocket 将日志推送到 web 客户端。

我希望修改本教程https://radu-matei.github.io/blog/aspnet-core-websockets-middleware/ 以适应我的需要。

教程项目运行良好。消息在 Web 客户端之间发送和接收。

但是,我无法将教程 Web 应用程序项目与我的 Web api 控制器集成。 “/log” api 给出 404 响应。

所以我决定启动一个 Web 应用程序模板并向其添加一个默认的 Web api 值控制器(具有属性 [Route("api/[controller]")])。

默认网页加载正常,但 api/values 给出 404 响应。

将具有路由属性的控制器添加到 Web 应用程序的正确方法是什么?

非常感谢!

【问题讨论】:

    标签: asp.net-core


    【解决方案1】:

    假设你有以下控制器:

    [Route("api/[controller]")]
    public class MyLogController : Controller
    {
        [HttpPost("log")]
        public string Post()
        {
            // your code here...
        }
    }
    

    然后您应该发帖到 URL /api/mylog/log。 WebApi 中 URL 的默认结构是 /api/<<Your Controller Name without Controller at the end>>。上述方法定义的自定义路由将附加到默认 url。此外,您的路线定义不需要以 / 开头。

    更多详情请看:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/routing

    希望这会有所帮助。

    【讨论】:

    • 由于路径中有额外的“/”,它无法正常工作!!但奇怪的是它可以在 web api 项目中工作
    【解决方案2】:

    由于这两个参数都是完整的句子字符串,最好将它们放在POST正文中。

    我特别建议您不要通过查询字符串发送堆栈跟踪。查询字符串有一个最大长度(取决于浏览器和可能的 Web 服务器),并且堆栈跟踪可以有很多文本。

    详细讨论: What is the maximum possible length of a query string?

    做这样的事情:

        [HttpPost("log")]
        public IActionResult Post([FromBody] Log data)
        {
           ...
        }
    

    带有日志类

    public class Log
    {
        public string StackTrace {get;set;}
        public string Message {get;set;}
    }
    

    【讨论】:

      猜你喜欢
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      • 2020-12-14
      相关资源
      最近更新 更多