我正在向一个动作(文件上传)发送一个multipart / form-data请求,但是我将它发送到路由指定的url中包含id的动作:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}/{action}",
defaults: new {action = "Index", id = RouteParameter.Optional }
);
网址我发布到:/api/Contacts/1/Photo
动作:
[HttpPost]
public HttpResponseMessage Photo(int id)
{
var task = this.Request.Content.ReadAsStreamAsync();
task.Wait();
Stream requestStream = task.Result;
/* ... */
}
使用id参数,我收到此错误:No 'MediaTypeFormatter' is available to read an object of type 'Int32' with the media type 'multipart/form-data'.
没有id参数,它可以正常工作。
我在这个答案here中尝试了一个MediaTypeFormatter,但是当尝试使用FirstDispositionNameOrDefault("id")
获取它时,它似乎没有从网址获取ID并崩溃。有没有办法让路由url中指定的id绑定到动作的id参数?
答案 0 :(得分:2)
FirstDispositionNameOrDefault用于读取表单控件的值。
您可以使用参数的[FromUri]属性:
public HttpResponseMessage Photo([FromUri] int id)
这告诉Web API不要从消息体中获取参数。