相关疑难解决方法(0)

在WebApi控制器中读取HttpContent

如何在MVC webApi控制器操作中读取PUT请求中的内容.

[HttpPut]
public HttpResponseMessage Put(int accountId, Contact contact)
{
    var httpContent = Request.Content;
    var asyncContent = httpContent.ReadAsStringAsync().Result;
...
Run Code Online (Sandbox Code Playgroud)

我在这里得到空字符串:(

我需要做的是:弄清楚在初始请求中修改/发送了什么属性(意味着如果Contact对象有10个属性,并且我只想更新其中2个属性,我只发送和对象只有两个属性,这样的事情:

{

    "FirstName": null,
    "LastName": null,
    "id": 21
}
Run Code Online (Sandbox Code Playgroud)

预期的最终结果是

List<string> modified_properties = {"FirstName", "LastName"}
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc asp.net-web-api httpcontent

67
推荐指数
3
解决办法
11万
查看次数

HttpContext.Response.Body.Position = 0 - “不支持指定的方法”错误

我已经设置了一些日志中间件,可以使用 HttpContext 获取和记录信息。

我需要将 HttpResponse.Body 的位置设置为 0 以读取整个流,但是,无论我尝试什么,它都会抛出“不支持指定的方法”并失败。

这对我来说很奇怪,因为 position 内置于 HttpResponse.Body 中,我之前成功使用过它。

我还尝试使用 HttpResponse.Body.Seek 获得相同的结果。

在这一点上我被卡住了,任何帮助将不胜感激。

更新:一旦我将 response.body 移动到新的内存流中,我就能够改变它的位置,但是,现在它返回一个空的主体。

public async Task Invoke(HttpContext context)
        {
            //Retrieve request & response
            var request = context.Request;
            var response = context.Response;

            if (request.Path != "/")
            {
                var reqBody = request.Body;
                var resBody = response.Body;
                string path = request.Path;
                string method = request.Method;
                string queryString = HttpUtility.UrlDecode(request.QueryString.ToString());
                int statusCode = context.Response.StatusCode;

                var buffer = new byte[Convert.ToInt32(request.ContentLength)];
                await request.Body.ReadAsync(buffer, 0, buffer.Length);
                var reqBodyText = Encoding.UTF8.GetString(buffer); …
Run Code Online (Sandbox Code Playgroud)

c# httpresponse httpcontext

13
推荐指数
2
解决办法
7463
查看次数

ASP.NET Core 3.0中HttpRequest.EnableRewind()的替代方法是什么?

BufferingHelper.EnableRewind();
Run Code Online (Sandbox Code Playgroud)

上面是ASP.NET Core 2.2中HttpRequest对象的扩展方法。ASP.NET Core 3.0(至少具有此名称)中没有更多内容。我想知道它在ASP.NET Core 3.0中是备用的。我不确定

HttpRequestRewindExtensions.EnableBuffering();
Run Code Online (Sandbox Code Playgroud)

是替代者。

buffering httprequest alternate asp.net-core-3.0

12
推荐指数
1
解决办法
1656
查看次数

如何在asp.net core MVC控制器中使用ReadAsStringAsync?

如何在asp.net core MVC控制器中使用ReadAsStringAsync?Microsoft.AspNetCore.Mvc.Request 没有 Content 属性。有替代方案吗?谢谢你!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using AuthLibrary;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Web;
using System.Web.Http;
using System.Threading.Tasks;

[Microsoft.AspNetCore.Mvc.Route("TestAPI")]
public class TestController : Controller
{

    [Microsoft.AspNetCore.Mvc.HttpPost]
    [AllowAnonymous]
    [Microsoft.AspNetCore.Mvc.Route("Start")]
      public async Task<HttpResponseMessage> Start()
    {
        string req = await this.Request.Content.ReadAsStringAsync();

        ////

    }
}
Run Code Online (Sandbox Code Playgroud)

asp.net-core-mvc asp.net-core

5
推荐指数
2
解决办法
7649
查看次数

来自WooCommerce的SHA256 webhook签名永远不会验证

我从一个woocommerce网站收到webhooks到nodejs/express应用程序.我试图验证webhook的签名以证明真实性,但我计算的哈希永远不会对应于woocommerce在钩子的签名头中报告的签名.

这是我用来验证真实性的代码:

function verifySignature(signature, payload, key){     
    var computedSignature = crypto.createHmac("sha256", key).update(payload).digest('base64');
    debug('computed signature: %s', computedSignature);
    return computedSignature === signature;
  }
Run Code Online (Sandbox Code Playgroud)

使用以下参数调用此函数:

var signature = req.headers['x-wc-webhook-signature'];
verifySignature(signature, JSON.stringify(req.body), config.wooCommence.accounts.api[config.env].webhookSecret)
Run Code Online (Sandbox Code Playgroud)

webhook的签名标题将签名报告为BewIV/zZMbmuJkHaUwaQxjX8yR6jRktPZQN9j2+67Oo=.然而,上述操作的结果是S34YqftH1R8F4uH4Ya2BSM1rn0H9NiqEA2Nr7W1CWZs=

我已经在webhook上手动配置了秘密,正如您在上面的代码中所看到的,这个相同的秘密也在快速应用程序中进行了硬编码.因此,要么我正在使用错误的有效负载来计算签名,要么还有其他可疑的东西阻止我验证这些签名.

非常感谢帮助我解决这个问题的任何指示.

hash webhooks node.js woocommerce

4
推荐指数
3
解决办法
1425
查看次数

如何在.net核心中获取HttpRequest主体?

我想在.net核心中获取Http Request主体,我使用了以下代码:

using (var reader
    = new StreamReader(req.Body, Encoding.UTF8))
{
    bodyStr = reader.ReadToEnd();
}
req.Body.Position = 0
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个错误:

System.ObjectDisposedException:无法访问已处置的对象。对象名称:“ FileBufferingReadStream”。

该行的using语句后发生错误

如何在.net核心中获取HttpRequest主体?以及如何解决此错误?

c# httpcontext streamreader asp.net-core

4
推荐指数
1
解决办法
1577
查看次数