簡體   English   中英

如何修復來自 Post 的 ASP.NET Web Api 接受的空 IFormFile

[英]How to fix a null IFormFile being accepted by an ASP.NET Web Api from a Post

最終,我想要一個簡單的文件上傳頁面,盡可能使用基本的 jQuery 代碼和服務器上的 c# 代碼,但我一直在服務器上收到一個空 IFormFile。

有很多示例說明如何使用帶有表單數據的 Ajax POST 並在 ASP.NET Web API 控制器操作上接收 IFormFile。 然而,似乎他們每個人都不得不嘗試對代碼進行多次調整才能使其正常工作。

我只用 API 部分做了一個簡單的解決方案,並使用 Postman 向它發送文件。 我嘗試了 Content-Type 和 Accept 標頭的不同組合,但我總是收到一個空文件。

為了滿足一些托管要求,我使用 OWIN 來自托管應用程序。 這是控制器代碼,我使用了默認值控制器並編輯了動作后...

    public string Post([FromBody]IFormFile file)
    {
        if (file != null)
        {
            return "Success: We got something!!!";
        }
        else
        {
           return "ERROR: We got nothing :-(";
        }

     }

我的 StartUp.cs 配置如下。 盡管我的示例顯示了 multipart/form-data,但我也嘗試了 application/JSON 和其他格式,包括將它們留空。

public void Configuration(IAppBuilder app)
        {
            var config = new HttpConfiguration();
            config.Routes.MapHttpRoute("default", "{controller}");
            config.EnableCors();

            config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("multipart/form-data"));

            app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
            app.UseWebApi(config);
        }

然后這里是我最近的郵遞員嘗試的 2 個屏幕截圖。 我已匆忙將它們放在 Wix 服務器上,如果它們尚不可見,請見諒

身體

標題

此時,我會很高興 Post 方法接收文件的非空值。

使用[FromForm]屬性而不是[FromBody]並刪除AcceptContent-Type標頭。

編輯:

所以看起來我很快就假設您正在使用 ASP.NET Core(盡管您另有說明),因為IFormFileMicrosoft.AspNetCore.Http命名空間類,所以這自然解釋了為什么當您在 .網絡框架。

我想從技術上講,可以創建這個 ASP.NET Core 接口的具體實現,然后創建一些特殊的案例模型綁定器,但這肯定需要一些工作。

我不確定您在哪里找到這些使IFormFile在 .NET Framework 中工作的示例,但我找不到任何示例。

我能找到的最接近 ASP.NET Core IFormFile綁定的體驗是這個ApiMultipartFormFormatter ,它非常容易實現並且支持HttpFile綁定。 一件不是很明顯的事情是,您需要將某些HttpFile屬性包裝到另一個類中才能使其工作。

public string Post([FromForm]MyViewModel vm)
{
    if (vm.file != null)
    {
        return "Success: We got something!!!";
    }
    else
    {
        return "Sadness: We got null :-(";
    }
}

public class MyViewModel
{
    public HttpFile SomeFile { get; set; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM