0

我正在向一个操作(文件上传)发送一个 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 参数,它工作正常。

我在这里的这个答案中尝试了 MediaTypeFormatter ,但它似乎没有从 url 获取 id 并且在尝试使用它时崩溃FirstDispositionNameOrDefault("id")。有没有办法让路由 url 中指定的 id 绑定到操作的 id 参数?

4

1 回答 1

2

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

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

public HttpResponseMessage Photo([FromUri] int id)

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

于 2012-04-07T14:25:09.517 回答