2017-04-19 218 views
0

這是我在stackoverflow上的第一個問題,希望它不是因爲我的搜索技能不佳。.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應用程序的正確方法是什麼?

非常感謝!

回答

0

假設你有如下控制器:

[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

0

由於這兩個參數都是完整的句子字符串,所以最好將它們放在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;} 
} 
相關問題