Chr*_*rie 8 rest asp.net-mvc asp.net-web-api2
我已经创建了一个Web API 2项目,尽管API工作正常,但我必须为它们输入一个尾部斜杠.
这导致404
http://www.myURL.com/api/v1/get/addressfromlatlong/UK/50.9742794/-0.1146699
Run Code Online (Sandbox Code Playgroud)
这显示了预期的JSON响应
http://www.myURL.com/api/v1/get/addressfromlatlong/UK/50.9742794/-0.1146699/
Run Code Online (Sandbox Code Playgroud)
我有另一个控制器与自定义操作工作正常.唯一的区别是它有一个整数参数...
它似乎与十进制类型有关,就好像我在URL中稍微变化并使用参数一样,API返回结果而没有问题:
此变体还按预期显示JSON响应
http://www.myURL.com/api/v1/get/addressfromlatlong/UK/50.9742794/?longitude=-0.1146699
Run Code Online (Sandbox Code Playgroud)
这不是世界末日,但我也使用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 }
);
}
Run Code Online (Sandbox Code Playgroud)
自定义属性和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;
}
Run Code Online (Sandbox Code Playgroud)
使用runAllManagedModulesForAllRequests.没有它,IIS认为它是一个文件请求,扩展名为小数点后的数字部分.找不到文件,404.
| 归档时间: |
|
| 查看次数: |
1868 次 |
| 最近记录: |