当前位置: 首页 > 知识库问答 >
问题:

ASP Net Core Web Api POSTRequest.Body始终长度为0

白光耀
2023-03-14

我正在开发一个服务,它将使用HTTP Content-Type:application/octet-stream和Transfer-Encoding: chunked接收文件。

我能够让服务器获取请求DisableFormValueModelBinda和Request estSizeLimit。

但是当我去从Request.Body获取数据时,长度总是0。

在框架中,我将使用类似request.Content的东西。ReadAsStreamAsync();但这似乎不是核心的选择。

我应该如何从客户端(邮递员)获取流的内容?

使用Postman,我尝试了body的二进制和表单数据选项,但在到达服务器后都没有body。通过阅读一些文档,有人建议创建一个使用多部分阅读器的新格式化程序。但这一切看起来都是基于多部分/表单数据内容类型,我没有使用它。我还尝试使用curl发送请求,但结果相同。

程序. cs

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

创业.cs

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseMvc();
    }
}

控制器

[HttpPost]
[RequestSizeLimit(2147483648)] // https://stackoverflow.com/questions/43305220/form-key-or-value-length-limit-2048-exceeded
[DisableFormValueModelBinding] // https://dotnetcoretutorials.com/2017/03/12/uploading-files-asp-net-core/
public void Upload()
{
    Request.EnableRewind();
    Stream body = Request.Body;
    Debug.WriteLine(body.Length);
}

共有1个答案

禄和宜
2023-03-14

我读了那篇文章,从中获得了[DisableFormValueModelBinding]。该属性的全部目的是停止ASP。NET从读身体。所以这就解释了为什么<code>body。长度为0。它只是还没有被读取(在您阅读整个内容之前,您无法知道长度)。

但是您可以阅读请求的< code>Content-Length标头:

var length = Request.ContentLength;
 类似资料:
  • 我尝试将元素映射到[]以获得角度。但如果我检查了对象的长度,则始终为0。。 屏幕如果I控制台.log(对象) 我做错了什么?

  • 下面是片段。请注意,我已经恢复到以前的提交,因此丢失了最近的修改,但请查看我编写的代码,然后才注意到始终等于0() 以下是当检测到活动后按: 以下是NoteActivity接收结果调用的方式。 null 我在我的项目上浪费了很多重要的时间,只是想知道是什么使resultCode和requestCode的值丢失了我发送的值。 任何帮助和指导都将不胜感激。非常感谢!

  • 问题内容: 我不知道我的代码正在发生什么。我没有错误,也没有回应。我正在将数据写入串行端口,并通过激活等待响应, 但未触发此事件,inputstream.available()始终返回0。可能是什么问题?我在Linux中使用RXTX。 编辑 我在主要方法上打开端口,并在应用程序内的按钮单击事件上发送消息。 问题答案: 不能用于进程间通信(包括串行),因为它仅检查当前进程中(输入缓冲区中)是否有可用

  • 我总是用下面的代码得到。 这是我的process代码 但如果coderesultcode正常工作。 这是我的

  • 问题内容: 我正在编写一个C#ASP.Net MVC应用程序,供客户端将文件发布到其他服务器。我正在使用通用处理程序来处理从客户端到服务器的发布文件。但是在我的处理程序中,System.Web.HttpContext.Current.Request.Files始终为空(0个计数)。 表格代码: 处理程序: 请帮我。谢谢。 问题答案: 最后,我发现了问题。 由于某些原因,控制器中的代码永远无法正常工

  • 问题内容: 我使用firefox 3.6.10和firebug进行调试 所以,这是我的代码: responseXML 始终为null,我已经尝试了来自不同域的多个URL。我也异步地尝试过,结果是一样的。该 responseText的 总是正确返回,与它没有任何问题。 我的目标是获取 responseXML.documentElement 。 谢谢你的帮助。 编辑----------- 此javas