【问题标题】:Web API Simplest way to pickup a multipart/form-data responseWeb API 获取多部分/表单数据响应的最简单方法
【发布时间】:2017-09-01 05:18:05
【问题描述】:

我有一个问题,但我看不到我做错了什么? 我想用最简单的方法让它工作我稍后会让它变得更复杂,但目前只想点击 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 }
        );

【问题讨论】:

    标签: c# .net asp.net-web-api iis-8 asp.net-web-api-routing


    【解决方案1】:

    这是一个路由问题。如果打算使用attribute routing,请确保它是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();
    

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

    我想用最简单的方法让它工作我 稍后会使其更复杂,但目前只想要该帖子 要命中的方法我什至不在乎里面的代码是否工作 目前。

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

    【讨论】:

    • @Helbo,您是否完全按照我的示例进行操作?因为根据您更新的问题,看起来您原始的操作内容完好无损。只需按照最简单形式的示例进行操作即可。一旦它工作,那么你可以考虑添加更复杂的代码。
    • 你在哪里,@Nikosi 我现在从我的应用程序发送请求时点击了该方法。谢谢 :) 现在我只需要获取数据并使用它,至少现在我知道如何从这里继续 :) 我会考虑您使用请求内容的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 2012-09-22
    • 1970-01-01
    • 2017-03-30
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    相关资源
    最近更新 更多