Asp.net web api webapi mediatypeformatter文本/html

Asp.net web api webapi mediatypeformatter文本/html,asp.net-web-api,Asp.net Web Api,使用webapi默认值,我能够发送和接收JSON数据。我现在有一个场景,我的api控制器无法区分get操作 api/控制器?ponumber=### 控制器?id=####(或api/控制器/####) 为了解决这个问题,我使用了ActionNameAttribute [ActionName("ById")] public Model Get(PoByIdQuery model) { return repo.Get(model); } [ActionName("ByPoNumbe

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

  • api/控制器?ponumber=###
  • 控制器?id=####(或api/控制器/####)
为了解决这个问题,我使用了ActionNameAttribute

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

[ActionName("ByPoNumber")]
public Model Get(PoByNumberQuery model)
{
     return repo.Get(model);
}
这会将URL更改为

  • /控制器/byponumber?ponumber=###
  • /控制器/字节ID/###

现在的问题是,当我检索到值时,它表示没有可用于text/html类型的格式化程序。如何配置mvc4/webapi以使用json格式化程序处理文本/html请求?或者,如何更改呼叫请求以请求json而不是html?

已解决

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

routes.MapHttpRoute(
    name: "ActionApi",
    routeTemplate: "api/{controller}/{id}/{action}",
    defaults: new { action = "ById", id = RouteParameter.Optional });
下一个问题是action的论点。根据。复杂类型取自主体,简单类型取自查询字符串。我可以使用
[FromUri]
覆盖此行为,并从查询字符串中提取采购订单号

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

  • /api/controller/u2;/bynumber?ponumber=###