.net核心在web应用程序中使用web api

问题描述:

这是我在*上的第一个问题,希望它不是因为我的搜索技能不佳。.net核心在web应用程序中使用web api

我最近试图用.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 /值给404响应。

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

非常感谢!

假设你有如下控制器:

[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>>。在方法之上定义的自定义路由将附加到默认网址。此外,您的路线定义不需要以/开头。

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

希望这有助于。

+0

它不是 “/” 路线中的额外的,因为工作!但奇怪的是,它在Web api项目中起作用 – ninespace

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

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

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

做这样的事情:

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

有了Log类

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