如何修复ASP.NET核心文件上传空文件

时间:2018-03-21 15:44:32

标签: asp.net-core kendo-ui-angular2

我正在尝试将一个csv文件从Angular上传到Asp.NET Core webapi。 但是,尽管Fiddler在网络上显示出一些东西,但是在网络上获取空对象。 我正在使用Kendo UI上传文件。

你能告诉我如何解决这个问题吗?我试过[FromBody]和[FromForm],但没有区别。

    [HttpPost]
    [Route(ApiRoutes.EodVariationMargin)]
    public async Task<IActionResult> UploadPlugAsync(object plugs)
    {
        var content = JsonConvert.SerializeObject(plugs); 
        _logger.LogInformation(content);
        return Ok();
    }

Request Count:   1
Bytes Sent:      1,470      (headers:539; body:931)
Bytes Received:  198        (headers:198; body:0)

ACTUAL PERFORMANCE
--------------
ClientConnected:    11:34:36.511
ClientBeginRequest: 11:34:44.561
GotRequestHeaders:  11:34:44.561
ClientDoneRequest:  11:34:44.566
Determine Gateway:  0ms
DNS Lookup:         0ms
TCP/IP Connect: 0ms
HTTPS Handshake:    0ms
ServerConnected:    11:34:36.512
FiddlerBeginRequest:    11:34:44.566
ServerGotRequest:   11:34:44.566
ServerBeginResponse:    11:35:15.629
GotResponseHeaders: 11:35:15.629
ServerDoneResponse: 11:35:15.629
ClientBeginResponse:    11:35:15.629
ClientDoneResponse: 11:35:15.630

    Overall Elapsed:    0:00:31.069

RESPONSE BYTES (by Content-Type)
--------------
~headers~: 198

2 个答案:

答案 0 :(得分:1)

我正在使用它并且它有效:

SubDagOperator

和Angular html:

SubDagOperator(
    subdag=subdag,
    task_id="...",
    on_retry_callback=lambda context: subdag.clear(
        start_date=context['execution_date'],
        end_date=context['execution_date']),
    dag=dag
)

答案 1 :(得分:1)

您无法绑定到object类型的操作参数。相反,我认为你可以但它不会为你做任何事情,因为object没有属性。因此,模型绑定器将简单地丢弃所发布的所有内容。

如果您尝试接受该参数中的上传,则它应为IFormFile类型。如果您尝试接受JSON有效负载,那么它应该是您创建的实际来表示该有效负载。例如,如果您发送的JSON如下:

{
    "foo": "bar"
}

然后,你需要一个类:

public class MyDTO
{
    public string Foo { get; set; }
}

如果您尝试将上传作为JSON有效内容的一部分发送,那么您的DTO类应该具有以文件上传密钥命名的byte[]属性,并且您的上传数据应作为Base发送64.例如:

{
    // other stuff
    "file": "{base64 encoded byte array}"
}

使用DTO:

public class MyDTO
{
    // other properties
    public byte[] File { get; set; }
}