Asp.net web api 当邮递员请求httppostedfilebase时,Web API中接收空值

Asp.net web api 当邮递员请求httppostedfilebase时,Web API中接收空值,asp.net-web-api,postman,httppostedfilebase,Asp.net Web Api,Postman,Httppostedfilebase,我试图向我的API控制器发送post请求。它接收除文件输入之外的所有输入。我尝试了一些解决方案,但没有任何效果。我在MVC中创建了相同的表单,它可以工作,但在API中不工作,我缺少的地方 我的博客控制器/创建操作 public HttpResponseMessage Create(Blogger objBlogger) { } 我的博客模式 public class Blogger { public string Blogger_Id { get; set; } [Requi

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

我的博客控制器/创建操作

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--

对于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
            ...
        }
    }
    ...
}
[HttpPost]
公共异步任务创建()
{
如果(!Request.Content.IsMimeMultipartContent())
{
this.Request.CreateResponse(HttpStatusCode.UnsupportedMediaType);
}
字符串root=HttpContext.Current.Server.MapPath(“~/temp”);
var provider=新的MultipartFormDataStreamProvider(根);
var result=wait Request.Content.ReadAsMultipartAsync(提供程序);
//档案
foreach(provider.FileData中的MultipartFileData文件)
{
Debug.WriteLine(file.Headers.ContentDisposition.FileName);
Debug.WriteLine(“文件路径:“+File.LocalFileName”);
}
//表单数据
foreach(provider.FormData.AllKeys中的var键)
{
foreach(provider.FormData.GetValues(键)中的var val)
{
//你的博客作者obj
...
}
}
...
}

我希望它出现在objBlogger httppostedfilebase变量中,正如我们在MVCI中收到的一样。我不知道开箱即用的方式,但您可以通过使用ModelBinder()实现类似的功能。这样,您就可以实现我在您的模型绑定器中编写的所有内容,然后在您的控制器中,在方法param中准备好所有内容。为什么不能像其他表单数据一样绑定文件?您可以尝试实现如下内容: