【问题标题】:web api attribute routing multiple parametersweb api属性路由多参数
【发布时间】:2018-06-20 15:07:25
【问题描述】:

我有一个方法定义如下

[Route("public/sites/GetAllForWeb")]
    [HttpGet]
    public IEnumerable<Domain.Site.Site> GetAllForWeb(DateTime date, int hour, string parameterCode = null)

然后被称为如下(角度)

return this.http.get&lt;Site[]&gt;("public/sites/GetAllForWeb?date=" + date + "&amp;hour=" + hour + ((parameterCode === undefined) ? "" : "&amp;parameterCode=" + parameterCode)

不幸的是,调用不匹配任何控制器方法,我假设是因为Route 属性中缺少参数。

应如何修改Route 属性以正确反映方法签名?

【问题讨论】:

  • 该 url 的路由属性似乎是正确的。您在控制器上有 routePrefix 属性吗?是否启用了路由属性? (你在 webapi 配置中有 config.MapHttpAttributeRoutes(); 行吗?)
  • 您是否尝试过这两个参数的 ([FromURI] DateTime date, int hour) 属性并将 /{date}/{hour} 放入 Route 属性中?
  • @J.Loscos 没有路由前缀,是的,该行在配置中。框架的路由属性中是否不需要属性以将请求与方法匹配?
  • 在您的示例中,所有方法参数都是 http 请求参数,因为它们在“?”之后所以你不需要在路由属性中指出它们。
  • 这就是我的想法……但它不起作用。还有其他想法吗?

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


【解决方案1】:

这个问题是我没有将api添加到Route属性中:/

出于某种原因,我觉得api

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

将被添加到Route 属性之前

【讨论】:

  • 这是为约定路由设置的默认路由,它根据控制器和操作名称查找方法。如果您正在使用Route 属性,那么您正在尝试使用 AttributeRouting 应该通过调用 config.MapHttpAttributeRoutes(); 来启用如果您这样做,您可以删除默认约定路由,您将使用路由中定义的地址访问您的方法属性:public/sites/GetAllForWeb,不需要 /api 位。
猜你喜欢
  • 2017-06-26
  • 2015-10-09
  • 1970-01-01
  • 2014-05-11
  • 1970-01-01
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多