【问题标题】:httppostedfilebase receive null in Web API when requested from Postman当从 Postman 请求时,httppostedfilebase 在 Web API 中接收 null
【发布时间】:2018-07-27 04:59:07
【问题描述】:

我试图向我的 API 控制器发送一个发布请求。它接收除文件输入之外的所有输入。我尝试了一些解决方案,但没有任何效果。我在 MVC 中创建了相同的表单,它可以工作,但在我缺少的 API 中不起作用。

我的 Blogger 控制器/创建操作

public HttpResponseMessage Create(Blogger objBlogger)
{

}

我的博客模型

public class Blogger
{
    public string Blogger_Id { get; set; }
    [Required]
    public string BloggerName { get; set; }
    [Required]
    public string BloggerUserName { get; set; }
    [Required]
    [RegularExpression(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$")]
    public string BloggerEmail { get; set; }
    [Required]
    [RegularExpression("^[0-9]*$")]
    public string BloggerMobileNumber { get; set; }
    public string BloggerProfilePicture { get; set; }
    [Required]
    public string BloggerPassword { get; set; }
    public HttpPostedFileBase UploadProfilePicture { get; set; }
}

我的邮递员代码

POST /api/Blogger/Create HTTP/1.1
Host: localhost:3694
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: 8097929a-bc93-42a4-8bc8-0e9ea98a279e

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="BloggerName"

DemoName
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="BloggerUserName"

DemoUserName
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="BloggerEmail"

DemoEmail@gmail.com
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="BloggerMobileNumber"

9999999999
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="UploadProfilePicture"; filename="asset.JPG"
Content-Type: image/jpeg


------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="BloggerPassword"

DemoPassword
------WebKitFormBoundary7MA4YWxkTrZu0gW--

【问题讨论】:

    标签: asp.net-web-api postman httppostedfilebase


    【解决方案1】:

    对于 Web API,请使用如下内容:

    [HttpPost]
    public async Task<HttpResponseMessage> Create()
    {
        if (!Request.Content.IsMimeMultipartContent())
        {
            this.Request.CreateResponse(HttpStatusCode.UnsupportedMediaType);
        }
    
        string root = HttpContext.Current.Server.MapPath("~/temp");
        var provider = new MultipartFormDataStreamProvider(root);
        var result = await Request.Content.ReadAsMultipartAsync(provider);
    
        // Files
        foreach (MultipartFileData file in provider.FileData)
        {
            Debug.WriteLine(file.Headers.ContentDisposition.FileName);
            Debug.WriteLine("File path: " + file.LocalFileName);
        }
    
        // Form data
        foreach (var key in provider.FormData.AllKeys)
        {
            foreach (var val in provider.FormData.GetValues(key))
            {
                // your Blogger obj
                ...
            }
        }
        ...
    }
    

    【讨论】:

    • 我希望它在我们在 MVC 中收到的 objBlogger httppostedfilebase 变量中
    • 我不知道开箱即用的方式,但您可以通过使用 ModelBinder (docs.microsoft.com/en-us/aspnet/web-api/overview/…) 来实现类似的效果。这样你就可以实现我在你的模型绑定器中编写的所有内容,然后在你的控制器中准备好方法参数中的所有内容。
    • 为什么文件不能像其他表单数据一样绑定?
    • 你能尝试实现这样的东西吗:gist.github.com/Danielku15/bfc568a19b9e58fd9e80
    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 2019-06-21
    • 2014-10-06
    • 2022-07-04
    • 1970-01-01
    • 2013-02-26
    • 2016-04-10
    • 2019-08-02
    相关资源
    最近更新 更多