Web API 获取 multipart/form-data 响应的最简单方法

Web API Simplest way to pickup a multipart/form-data response

我有一个问题,但我看不出我做错了什么? 我想用最简单的方法让它工作 我稍后会让它变得更复杂,但目前只想调用 post 方法 我什至不关心里面的代码当前是否在工作。

我唯一关心的是它会发回 OK 200 回复。

目前,我收到内部服务器错误 500 响应或 405 方法不允许响应,具体取决于我是尝试发送数据还是仅使用浏览器强制调用方法。

有一个 IOS 应用程序可以发送下面的 post 请求,我有一个测试 PHP 脚本证明它有效。现在我想将它移动到应该在 IIS 8 上工作的服务器上。但是我什至正在努力建立当前的连接:

POST /api/Image/Upload HTTP/1.1
Host: ServerName
Content-Type: multipart/form-data; boundary=-------------Boundary----------35042EC1-790C-4CDD-8E21-66E6B1025C2D
Connection: keep-alive
Accept: */*
filename: DefaultPrefix1.jpg
User-Agent: KameraApp/1 CFNetwork/808.3 Darwin/16.3.0
Content-Length: 5492253
Accept-Language: da-dk
Accept-Encoding: gzip, deflate

---------------Boundary----------35042EC1-790C-4CDD-8E21-66E6B1025C2D
Content-Disposition: form-data; name='image'; filename="DefaultPrefix1.jpg"
Content-Type: image/jpg

Image Data
End boundary

我是如何尝试获取以上内容的 Multipart/form-data:

[RoutePrefix("api/Image")]
public class ImageController : ApiController
    {

        [HttpPost]
        [Route("Upload")]
        public IHttpActionResult Upload()
        {
            var files= HttpContext.Current.Request.Files;

            var aFile = files.Get(0);


            string filename = aFile.FileName;
            string path = @"C:\ImageUploaderService\UploadFolder";
            aFile.SaveAs(path + filename);
            return Ok("Working");
        }
    }

编辑:

根据以下建议更改为当前方法

我的 WebApiConfig 看起来像这样:

  public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

这是路由问题。如果打算使用 attribute routing, then make sure that it is enabled

public static class WebApiConfig {
    public static void Register(HttpConfiguration config) {
        // Attribute routing.
        config.MapHttpAttributeRoutes();

        // Convention-based routing.
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

并相应地装饰目标控制器

[RoutePrefix("api/Image")]
public class ImageController : ApiController {        
    [HttpPost]
    [Route("Upload")] // Matches POST api/Image/Upload
    public IHttpActionResult Upload()
    {
        return Ok("I am working");
    }
}

从那里您应该能够包括您的附加功能。

如果您想读取多部分数据,请考虑从请求的内容中获取它。

var content = await Request.Content.ReadAsMiltipartAsync();

only thing I care about is that it sends a OK 200 reply back.

I want to make the simplest method possible to get this to work I will make it more complex later but currently just want the post method to be hit I don't even care if the code inside is working currently.

这个答案应该解决上述问题。任何进一步的问题都应该在其他问题中发布。