当前位置: 首页 > 知识库问答 >
问题:

Web API获取多部分/表单数据响应的最简单方法

淳于祺
2023-03-14

我有个问题,但我看不出我做错了什么?我想用最简单的方法来实现这一点,稍后我会让它变得更复杂,但现在我只想点击post方法,我甚至不在乎里面的代码当前是否正常工作。

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

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

有一个IOS应用程序发送下面的post请求,我有一个测试PHP脚本证明了这一点。现在我想把它移到应该在IIS8上执行工作的服务器上。然而,目前我甚至连建立连接都很困难:

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 }
        );

共有1个答案

应志用
2023-03-14

这是一个路由问题。如果打算使用属性路由,请确保已启用该属性路由

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的回复。

我想用最简单的方法来实现这一点,稍后我会让它变得更复杂,但现在我只想点击post方法,我甚至不在乎里面的代码当前是否正常工作。

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

 类似资料:
  • 通常,我需要通过JSOUP将数据以响应multipart/form-data的形式发送到站点 作为一个示例,使用一个简单的窗体来sgeniriruet您的查询。 <表单操作=«localhost:8000»方法=«post»enctype=»多部分/表单数据» <输入类型=»文本»名称=»文本»值=»文本默认值» <输入类型=»文件»名称=»文件1» <输入类型=»文件»名称=»文件2» 提交 通

  • 问题内容: 我熟悉该界面,但是使用起来很笨拙。例如,为了找出表名,您必须使用众所周知的文字作为列名来调用并循环返回。 有没有更简单的方法来获取数据库元数据? 问题答案: 使用DdlUtils很容易做到:

  • 我收到第三方对我的laravel post API的请求,其中包含两个表单数据(ID、文件)和标题(内容类型多部分/表单数据) 在laravel控制器中,在

  • 本文向大家介绍Javaweb获取表单数据的多种方式,包括了Javaweb获取表单数据的多种方式的使用技巧和注意事项,需要的朋友参考一下 Javaweb获取表单数据的几种方式 一、通过键值对的形式获取表单数据 getParameter(String name):通过key,返回一个value。 getParameterValues(String name):通过key返回一个string数组(多个值

  • 没有边界的多部分/表单数据请求是否有效?根据规范,当有超过1个部分时,使用边界将它们分开(并且该边界不应该是身体的一部分)。我有一个请求,其中有一个单一的主体作为原始内容或文件,在内容类型中,我们传递“多部分/表单数据”。这种要求实际上有效吗?

  • 我目前正在尝试解析我通过Chrome中的Postman插件发送的。然而,我得到的输出如下: 当我尝试调试时,会得到这个输出。当我尝试时,我得到一个空数组,所以我假设数据的格式不正确(只是一个字符串)。在我写我自己的算法之前,我想确定我没有用这个算法重新发明轮子。我做错什么了?或者,如果没有,是否存在一些CakePHP3函数来处理这个问题? 更新 我发现了代码中的错误,路由过程似乎以某种方式将pos