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.
这个答案应该解决上述问题。任何进一步的问题都应该在其他问题中发布。
我有一个问题,但我看不出我做错了什么? 我想用最简单的方法让它工作 我稍后会让它变得更复杂,但目前只想调用 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.
这个答案应该解决上述问题。任何进一步的问题都应该在其他问题中发布。