routes - 为什么这个 url 不能匹配 asp.net webapi 中的 Route Temple
问题描述
为什么这个 url( http://localhost:52806/openapi/Icrmorder.TestApi/ ) 可以匹配路由 Temple(openapi/I{controller}.{action}/) 但 url( http://localhost:52806/IRegion.TestApi / ) 没有?
这是 Microsoft.AspNet.WebApi 5.2.4 我有谷歌并尝试所有条件,仍然没有结果,我需要一些帮助,Ths!
1.WebApiConfig.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
namespace TestRegion
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API 配置和服务
// Web API 路由
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "openapi/I{controller}.{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}
2.RegionController.cs
using System.Web.Http;
namespace TestRegion.Controllers
{
public class RegionController : ApiController
{
[HttpGet]
public IHttpActionResult TestApi()
{
return Json( new { value="ceshi" });
}
}
}
- CrmOrderController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace TestRegion.Controllers
{
public class CrmOrderController : ApiController
{
[HttpGet]
public IHttpActionResult TestApi()
{
return Json(new { value = "ceshi" });
}
}
}
解决方案
问题 1 是.
您的路由模板中有一个,因此您的配置需要:
<modules runAllManagedModulesForAllRequests="true" />
如果您在 HTTP.SYS(例如:ISIS)上托管并且您还没有。
问题 2可能是 Web API 的限制。我不确定您是否可以在同一个 URL 段中有两个路由参数。理论上应该是可以的,但是我以前从未见过这样的路由模板。
最后,您的路由配置表明它有一个可选的{id}
路由参数,该参数甚至不在路由模板中。这不应该影响结果,但是它的配置对审阅者来说毫无意义并且可以说是混乱的。
我会考虑.
从您的路线模板中删除 ,并进一步考虑使用更传统的路线模板,其形式更接近{controller}/{action}
.
我希望这会有所帮助。
推荐阅读
- javascript - 如何更改本机反应中的每个图标名称
- c++ - 如何有效地在 googletest 中组织单元测试
- apache-spark - PySpark 数据框条件按窗口/滞后
- google-chrome - 查看源代码开始显示1行中的所有代码,如何更改?
- demandware - 如何使用 SFRA 创建站点,但名称和 ID 将是我的自定义名称和 ID
- css - 如何使我的 :active 伪元素工作?
- python - AI 100 测试人脸检测 API 练习
- qt - 如何在其他类中获取应用程序的QML引擎
- r - 如何用循环的输出覆盖循环中的列列表?
- c++ - UDP 多播不适用于 linux Debian