pierre3 / LineMessagingApi

LINE Messaging API for .Net
MIT License
160 stars 97 forks source link

HttpRequestMessage does not have data in ASP.NET Core #34

Open huyjack178 opened 6 years ago

huyjack178 commented 6 years ago

Currently I am converting LINE with bot framework application to ASP.NET Core, implement the same controller [HttpPost] public async Task<ActionResult> Post([FromBody] HttpRequestMessage request)

But when I test webhook, HttpRequestMessage does not have any data. Can anyone help?

kenakamu commented 5 years ago

Check this out. https://github.com/kenakamu/LINEChannelConnector/

seanmars commented 5 years ago

I got same issue, but i rewrite the WebhookRequestMessageHelper by using HttpContext. Some sample to get the content:

using(var reader = new StreamReader(httpContext.Request.Body))
{
    var content = await reader.ReadToEndAsync();
    ...
    ...
    dynamic json = JsonConvert.DeserializeObject(content);
}
fuyunekojima commented 4 years ago

Using seanmars' code to create a method like the one below, I was able to create an HttpRequestMessage that the "GetWebhookEventsAsync" extension method can use successfully.

Note that the "X-Line Signature" key must be included in the header.

private async Task<HttpRequestMessage> GetLineRequest()
{
    using (var reader = new StreamReader(HttpContext.Request.Body))
    {
        var content = await reader.ReadToEndAsync();
        var reqMessage = new HttpRequestMessage
        {
            RequestUri = new Uri("https://localhost:5001/callback"),
            Content = new StringContent(content, Encoding.UTF8, "application/json")
        };
        var signature = HttpContext.Request.Headers.Where(x => x.Key == "X-Line-Signature").First();
        reqMessage.Headers.Add(signature.Key, signature.Value.ToString());
        return reqMessage;
    }
}