加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – Web API 2需要使用尾部斜杠来使自定义属性路由起

发布时间:2020-12-16 04:11:05 所属栏目:asp.Net 来源:网络整理
导读:我已经创建了一个Web API 2项目,虽然API工作正常,但我必须为它们输入一个尾随斜杠. 这导致404 http://www.myURL.com/api/v1/get/addressfromlatlong/UK/50.9742794/-0.1146699 这显示了预期的JSON响应 http://www.myURL.com/api/v1/get/addressfromlatlong/U
我已经创建了一个Web API 2项目,虽然API工作正常,但我必须为它们输入一个尾随斜杠.

这导致404

http://www.myURL.com/api/v1/get/addressfromlatlong/UK/50.9742794/-0.1146699

这显示了预期的JSON响应

http://www.myURL.com/api/v1/get/addressfromlatlong/UK/50.9742794/-0.1146699/

我有另一个控制器与自定义操作工作正常.唯一的区别是它有一个整数参数…

它似乎与十进制类型有关,就好像我在URL中稍微变化并使用参数一样,API返回结果而没有问题:

此变体还按预期显示JSON响应

http://www.myURL.com/api/v1/get/addressfromlatlong/UK/50.9742794/?longitude=-0.1146699

这不是世界末日,但我也使用Swagger生成我的API文档,并自动使用上述第一个URL,并包含内置测试,当然,这些测试失败了.对于那些引用API文档的开发人员来说,这并不是那么好.

任何人都可以解释为什么这可能会发生以及如何在没有尾随斜线的情况下让它工作?

路线配置

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapMvcAttributeRoutes();

        routes.MapRoute(
            name: "Default",url: "{controller}/{action}/{id}",defaults: new { controller = "Home",action = "Index",id = UrlParameter.Optional }
        );
    }

自定义属性和Controller Action

[Route("get/addressfromlatlong/UK/{latitude:decimal=0}/{longitude:decimal=0}")]
    public AddressDetails GetAddressDetailsByLatLong(decimal latitude,decimal longitude)
    {
        AddressDetails addressDetails = repository.GetAddressDetailsByLatLong(latitude,longitude);
        return addressDetails;
    }

解决方法

使用 runAllManagedModulesForAllRequests.没有它IIS认为它是一个文件请求,扩展名为小数点后的数字部分.找不到文件,404.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读