为什么在asp.net web api路由中不能有多个[fromUrl]标签

时间:2015-03-24 03:16:02

标签: asp.net asp.net-web-api

我的HttpConfiguration代码:

config.Routes.MapHttpRoute(
    name: "ApiByToken",
    routeTemplate: "web_api/{controller}/{action}/{token}",
    defaults: new { token = RouteParameter.Optional}
);

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "web_api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

我有一个api,它用于登录:

[HttpPost]
public string Login([FromUri]string token, [FromBody]string user, [FromBody] string pwd)
{
    //...
}

让我烦恼的是,如果我这样编码,会有一个例外,说我在发送请求时无法将多个变量(用户和密码)绑定到请求。

但如果我删除[fromBody]标签中的一个,那就没关系了:

public string Login([FromUri]string token, [FromBody]string user)
public string Login([FromUri]string token, [FromBody] string pwd)

1 个答案:

答案 0 :(得分:0)

最多允许一个参数从邮件正文中读取。所以这不起作用:

// Caution: Will not work!    
public HttpResponseMessage Post([FromBody] int id, [FromBody] string name) { ... }

此规则的原因是请求正文可能存储在只能读取一次的非缓冲流中。

explanation