LineMessagingApi icon indicating copy to clipboard operation
LineMessagingApi copied to clipboard

HttpRequestMessage does not have data in ASP.NET Core

Open huyjack178 opened this issue 7 years ago • 3 comments
trafficstars

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?

huyjack178 avatar Jul 02 '18 09:07 huyjack178

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

kenakamu avatar Jan 22 '19 03:01 kenakamu

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);
}

seanmars avatar Jan 22 '19 06:01 seanmars

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;
    }
}

fuyunekojima avatar Apr 25 '20 06:04 fuyunekojima