0

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

  • api/控制器?ponumber=###
  • 控制器?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?ponumber=###
  • /controler/byid/###

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

4

1 回答 1

0

解决

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

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

下一个问题是行动的论点。根据这篇文章。复杂类型取自主体,简单类型取自查询字符串。我可以[FromUri]用来覆盖此行为并从查询字符串中提取 po 编号。

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

  • /api/controller/_/bynumber?ponumber=###
于 2012-08-13T22:50:51.440 回答