MVC WebAPI2属性路由使用以double类型的路由参数结尾的路径

时间:2015-02-03 02:50:03

标签: asp.net-mvc-5 asp.net-web-api2 attributerouting

我们遇到WebApi2属性路由问题。我们最近升级到MVC5和Web Api 2.作为升级的一部分,我们将Web Api转移到使用属性路由。

我们的一个API调用允许使用纬度和经度边界框来请求数据。

https://myapi.com/v1/things/area/ {toplat} / {leftlon} / {botlat} / {rightlon}

这在之前的api中有效,但在新的api中没有。我们无法找到允许其工作的配置。最后一个参数{rightlon}是一个double,xx.XXX被解释为文件扩展名。

将参数指定为double {toplat:double}没有任何影响。我们无法轻易强制旧版客户端更新,以包含一些帖子建议的尾部斜杠。这个配置更改对我们来说也没有用。 Why is my Web API method with double args not getting called?

有没有人找到一种方法在WebApi2中使用属性路由来允许具有double / decimal / float作为最后一个路由参数的路由?

1 个答案:

答案 0 :(得分:0)

解决。

链接文章确实包含了解决方案,但在属性路由上也需要正确的格式。

[HttpGet] [路线(“〜/ v1 / things / area / {toplat:double} / {leftlon:double} / {botlat:double} / {rightlon:double}”)]

web.config中的

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
        <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
        <remove name="OPTIONSVerbHandler" />
        <remove name="TRACEVerbHandler" />
        <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    <modules>
        <remove name="UrlRoutingModule-4.0" />
        <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
    </modules>
</system.webServer>