webapi mediatypeformatter text / html

时间:2012-08-13 22:12:24

标签: asp.net-web-api

使用webapi默认值我能够发送和接收JSON数据。我现在有一个场景,我的api控制器无法区分获取动作

  • API /控制器?采购单号码= ###
  • controller?id = ###(或api / controller / ###)

解决这个问题我使用了ActionNameAttribute

[ActionName("ById")]
public Model Get(PoByIdQuery model)
{
     return repo.Get(model);
}

[ActionName("ByPoNumber")]
public Model Get(PoByNumberQuery model)
{
     return repo.Get(model);
}

这会将网址更改为

  • / CONTROLER / byponumber?采购单号码= ###
  • / CONTROLER / byid / ###

现在的问题是当我检索它的值时,没有格式化器可用于text / html类型。如何配置mvc4 / webapi以使用json格式化程序进行text / html请求?或者,我如何更改我的调用请求以请求json而不是html?

1 个答案:

答案 0 :(得分:0)

<强>解决

首先我需要添加路由。默认情况下,webapi会忽略该操作。所以我创建了一个包含动作的路线

routes.MapHttpRoute(
    name: "ActionApi",
    routeTemplate: "api/{controller}/{id}/{action}",
    defaults: new { action = "ById", id = RouteParameter.Optional });

下一个问题是行动的论点。根据{{​​3}}。复杂类型从正文中获取,简单类型从查询字符串中提取。我可以使用[FromUri]覆盖此行为并从查询字符串中提取po号。

有一个副作用,我现在可以处理。我必须为{id}提供一个参数。所以我的网址看起来像这样

  • / API /控制器/ _ / bynumber?采购单号码= ###