为什么这个网址无法与asp.net webapi中的Route Temple相匹配

时间:2019-01-28 08:16:10

标签: routes asp.net-web-api2

为什么此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" });
        }
    }
}
  1. 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" });
        }
    }
}

结果: enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

问题1是您的路由模板中有一个.,因此您的配置需要具有:

<modules runAllManagedModulesForAllRequests="true" />

如果您托管在HTTP.SYS(例如ISIS)上,但您还没有该主机。

问题2 可能是Web API的局限性。我不确定在同一个网址段中是否可以有两个路由参数。从理论上讲应该可行,但是我以前从未见过这样的路由模板。

最后,您的路由配置表明它具有一个可选的{id}路由参数,该参数甚至不在路由模板中。 不应该影响结果,但是它的配置毫无意义,并且可能会使审稿人感到困惑。

我会考虑从您的路由模板中删除.,并进一步考虑使用一种更接近{controller}/{action}的形式的常规路由模板。

我希望有帮助。