Asp.net WebApi multipart / form-data,带有来自路由定义的id

时间:2012-04-07 07:23:35

标签: asp.net-web-api

我正在向一个动作(文件上传)发送一个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参数?

1 个答案:

答案 0 :(得分:2)

FirstDispositionNameOrDefault用于读取表单控件的值。

您可以使用参数的[FromUri]属性:

public HttpResponseMessage Photo([FromUri] int id)

这告诉Web API不要从消息体中获取参数。