为什么此url(http://localhost:52806/openapi/Icrmorder.TestApi/)可以匹配路线Temple(openapi / I {controller}。{action} /) 但是url(http://localhost:52806/IRegion.TestApi/)不是吗?
这是Microsoft.AspNet.WebApi 5.2.4 我有Google并尝试了所有条件,仍然没有结果,我需要一些帮助!
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" });
}
}
}
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" });
}
}
}
答案 0 :(得分:0)
问题1是您的路由模板中有一个.
,因此您的配置需要具有:
<modules runAllManagedModulesForAllRequests="true" />
如果您托管在HTTP.SYS(例如ISIS)上,但您还没有该主机。
问题2 可能是Web API的局限性。我不确定在同一个网址段中是否可以有两个路由参数。从理论上讲应该可行,但是我以前从未见过这样的路由模板。
最后,您的路由配置表明它具有一个可选的{id}
路由参数,该参数甚至不在路由模板中。 不应该影响结果,但是它的配置毫无意义,并且可能会使审稿人感到困惑。
我会考虑从您的路由模板中删除.
,并进一步考虑使用一种更接近{controller}/{action}
的形式的常规路由模板。
我希望有帮助。